Add support for in-place map for `Vec`s of types with same size (take 3)

This is implemented using a new struct PartialVec which implements the proper
drop semantics in case the conversion is interrupted by an unwind.

For the old pull requests, see #15302, #16369.

I don't know, it felt more natural to me, maybe because `map_in_place` sounds less like a hyphen between "in" and "place". But I have absolutely no problem in renaming this if you want it.