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

This is #15720, rebased and reopened.

cc @nikomatsakis
This trait is never parameterized over. Maybe it would be cleaner for these methods just to be put on the various `Bucket`s? Even better, they could just be implemented on `Bucket` with methods (possibly `Deref`-based) to convert an `EmptyBucket` or a `FullBucket` into a `Bucket`.