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.
I agree that they implementation of finding different unions depends on how the union is structured, but shouldn't that be handled in cover-union. It changes the meaning of cover-union, but that is expected given that we have a new type of union that we want to print differently.