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.
Description is potentially misleading. "if there are more `T`s" could be interpreted as "more `T`s after one was popped". Perhaps

```rust
/// Removes the next `T` from the vector and returns it, or `None` if there are none left.
```

This is similar to the wording used for [`Vec.pop()`](http://doc.rust-lang.org/collections/vec/struct.Vec.html#method.pop)