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

This is #15720, rebased and reopened.

cc @nikomatsakis
Instead of just returning the table, the search functions could return the bucket where it realized that the key could not be found. This bucket should be the same bucket that a new value would be inserted into, and so that should speed up methods like `find_or_insert`.