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

This is #15720, rebased and reopened.

cc @nikomatsakis
This was a concern with RawTable, because of a bug. But it shouldn't be a concern in hashmap.rs, because constructing RawTable with capacity >= `uint::MAX / size_of::<u64>()` will fail anyway. In general, it's fine if it doesn't introduce unsafety, and hashmap.rs is a safe interface already.