Upgrade HashMap to new entry API in RFC 509 (https://github.com/rust-lang/rust/issues/19986)

TODOs/things that make me frowny face:

  - Entry is still <'a, K, V> instead of <'a, O, V>
  - I'm not happy about the fact that this clones the key even when it's already owned.
  - With small keys (e.g. ints), taking a reference seems wasteful.
  - The other maps are still outstanding.

r? @Gankro
cc: @cgaebel
That's why the entry is `O` and not `K` (in retrospect, I guess it *also* needs the `K` for the Map itself). It might make sense to replace `O` with `Q` to match the other HashMap methods, though?