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

TODOs:
  - ~~Entry is still `<'a, K, V>` instead of `<'a, O, V>`~~
  - ~~BTreeMap is still outstanding~~.
  - ~~Transform appropriate things into `.entry(...).get().or_else(|e| ...)`~~

Things that make me frowny face:
  - I'm not happy about the fact that this `clone`s the key even when it's already owned.
  - With small keys (e.g. `int`s), taking a reference seems wasteful.

r? @Gankro
cc: @cgaebel
In the future I expected `entry.get` to become *very* idiomatic. But that's a fair point. I'll yield the point to someone who touches rustdoc/compiler code for what they prefer.

:smiling_imp: :fire:  summoning compiler dev :fire: :smiling_imp: