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.
The filters should not be on polymorphic types, just the Top part. These are correct here because the input is constained to meet the type but having it be minimal is less likely to cause errors if there is a refactoring later.