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

This is #15720, rebased and reopened.

cc @nikomatsakis
Is there any reason why `EmptyBucket` and `FullBucket` duplicate the fields of `Bucket`? Why not just have a wrapper `bucket: Bucket<K, V, M>` field?