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.
cover-union finds named unions. This works for flat things like the numeric types, but for polymorphic containers, there is no single name for each instantiation.