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.
Because they need to protect both sides and it would be unsound to generate a contract that looked like that.