It turns out that some of the peak memory is actually during the inventory to string to bundle translations. So re-use the refcount logic there. This actually does show a decrease in peak memory. Specifically 'cd bzr.dev; bzr send ../2.2' drops from 221MB peak to 156MB.
We don't speed anything up (16.5s both ways), but peak memory is quite a bit better.