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.
(Also, `assert_eq!(...)` is used like `assert_eq!(a, b);`, not `assert_eq!(a == b)`.)