[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
This test currently allows for `(k, v) == (1, "b")` and `(k, v) == (2, "a")`. Should probably be one assert, no?
```
for item in a.drain().take(1) {
    assert!(item == (1, "a') || item == (2, "b"));
}
```