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.
This should document that the size must be > 0. You may also want to add a `# Failure` section that notes that it fails if `T` and `U` do not have the same size, or if that size is 0.