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.

Is `min_align_of` the right thing? (rather than plain [`align_of`](http://doc.rust-lang.org/master/std/mem/fn.align_of.html)?)