Refactor `Vec::map_in_place` to move code out of `PartialVec`

Additionally, support zero-sized types.

Now there isn't a safe interface of `PartialVec` anymore, it's just a bare data structure with destructor that assumes you handled everything correctly before.