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

This is #15720, rebased and reopened.

cc @nikomatsakis
`self.idx` starts out as a valid index in the underlying array, equal to `self.hash().inspect() & (self.table.capacity() - 1)`. It then increases monotonically as we walk the array, even when we wrap around to 0. Thus, `self.idx - (self.hash().inspect() & (self.table.capacity() - 1))`  is the always-non-negative correct answer, assuming we have *not walked past ourselves*.

I *think* then that `(self.idx - self.hash().inspect() as uint) & (self.table.capacity() - 1)` is the same computation, but tolerant to us walking past ourselves a bit? Maybe? It's late, so my bitfoo and abstract algebra is a tad weak. Is this reasoning correct? Is there anywhere where you *would* walk past yourself? Or is this just some odd micro-optimization?

I'd appreciate this expression being better documented, if nothing else.