Well, the reason why it's returning `~str` is that `str::str::replace` also returns `~str`, so I figured it'd be good to stay consistent.

Also, if it returned a `StrBuf`, it would be difficult for the caller to safely and efficiently transform it into a `~str`. And I don't mean avoiding the shrinking, but avoiding the redundant `collect` in the `from_iter` implementation of `~[]`.

Could we leave it as `~str` with the note to revisit it once DST happens?