Add support for in-place map for `Vec`s of types with same size

This is implemented using a new struct `PartialVec` which implements the proper
drop semantics in case the conversion is interrupted by an unwind.
PartialVec: Remove TODOs and rename `unwrap` to `into_vec`
Fix some of the issues mentioned in the PR on Github

This specifically includes:
- Fix of the tests
- Remove `transmute` between `Vec`s of different types
Check that the `min_align_of` the both types in a `PartialVec` matches

This is important because the underlying allocator of the `Vec` passes that
information to the deallocator which needs the guarantee that it is the same
parameters that were also passed to the allocation function.
Minimize the public interface and rename it to `map_in_place`
Remove the unused `Iterator` implementation of the private `PartialVec`
Added missing `}` from `map_in_place` rebase
auto merge of #16853 : tbu-/rust/pr_mapinplace, r=aturon

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.