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

This is #15720, rebased and reopened.

cc @nikomatsakis
In retrospect, couldn't this be reduced to the much less magical:

`let dist = self.idx - ((self.idx + 1) & (self.table.capacity() - 1))`

Now, you replace a `^` with a `-`, but I've noticed that you use `self.table.capacity() - 1` enough that it might be worth just caching this this value?