Optimized HashMap. RawTable exposes a safe interface. (reopen)

This is #15720, rebased and reopened.

cc @nikomatsakis
@Gankro: For example, the `with_capacity` method on `Vec<T>` is often used to obtain a large buffer to write into. Returning a vector of *at least* that much capacity is part of the contract of the function. It's a bit odd to deviate from that in other containers.