Split HashTable out into mutable and immutable kinds.

There are some inference problems making the marketplace tests fail. I'll need same help fixing that up.
Why do we need the 3rd and 4th cases? It seems like they are specializations of the first two.