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.
It is the right tool when you need ownership (even for `T -> T`); however, changing this to some type that isn't `Copy` seems like a good idea.