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 recently implemented this, and it went out in the last release. If both returning a true value and a false value have the same filter, then sequencing like `begin` refines the type environment.

This was originally implemented to support `(let ([x (read)]) (unless (number? x) (error 'bad)) (add1 x))`.