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

This is #15720, rebased and reopened.

cc @nikomatsakis
So I've never been totally clear on what Rust's policy on what to do about a user requesting, or actually *managing* to construct catastrophically large datastructures is. It is of course absurd to demand a HashMap with capacity with uint::MAX/2+1 reserved space, but if they do, this will overflow and they'll actually get a HashMap with very low minimum capacity. Is this a concern?