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

This is #15720, rebased and reopened.

cc @nikomatsakis
I think having three allocations is just less pressure on `malloc` simply because it has to do 1/3 the work.

Remember that vram is different from physical ram. So when you hash table's size starts getting measured in pages, you get consecutive vram addresses but not necessarily consecutive physical ram addresses.