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.
If `sizeof(T) != 0` and `sizeof(T) == sizeof(U)` then this assert here about `sizeof(U) != 0` is superfluous.