[hashmap] Adds `drain`: a way to sneak out the elements while clearing a map.

It is useful to move all the elements out of a hashmap without deallocating
the underlying buffer. It came up in IRC, and this patch implements it as
`drain`.

r? @Gankro
cc: @frankmcsherry
/Users/cgaebel/code/rust/src/libcollections/vec.rs:1149:23: 1153:14 error: if and else have incompatible types: expected `*const T`, found `*mut T` (values differ in mutability)