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.

Yes, as of now, the `Vec` class passes `min_align_of` to the allocator. See for example [src/libcollections/vec.rs:164](https://github.com/rust-lang/rust/blob/67b97ab6d2b7de9b69fd97dc171fcf8feec932ff/src/libcollections/vec.rs#L164).