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.
    [infer-t (cl->*
              (->* (list (-HT (-v a) (-v b)) (-v c) (-> (-v b) (-v d)))
                   (-IHT (Un (-v a) (-v c)) (Un (-v b) (-v d))) :
                   (-FS (-filter (-IHT (-v a) (-v b)) 0) (-filter (-IHT (-v a) (-v b)) 0)))
              (->* (list (-HT (-v a) (-v b)) (-v c) (-> (-v b) (-v d)) (-> (-v d)))
                   (-IHT (Un (-v a) (-v c)) (Un (-v b) (-v d))) :
                   (-FS (-filter (-IHT (-v a) (-v b)) 0) (-filter (-IHT (-v a) (-v b)) 0)))
;; Broken when commented.
#;
              (->* (list (-HT (-v a) (-v b)) (-v c) (-> (-v b) (-v b)))
                   (-IHT (Un (-v a) (-v c)) (-v b)) :
                   (-FS (-filter (-IHT (-v a) (-v b)) 0) (-filter (-IHT (-v a) (-v b)) 0)))
#;
              (->* (list (-HT (-v a) (-v b)) (-v c) (-> (-v b) (-v b)) (-> (-v b)))
                   (-IHT (Un (-v a) (-v c)) (-v b)) :
                   (-FS (-filter (-IHT (-v a) (-v b)) 0) (-filter (-IHT (-v a) (-v b)) 0))))
             (->* (list (-HT -Symbol Univ) -Symbol (-poly (a) (-> a a)) (-> Univ))
                  (-IHT -Symbol Univ) :
                  (-FS (-filter (-IHT (-v a) (-v b)) 0) (-filter (-IHT (-v a) (-v b)) 0)))
             #:vars '(a b c d)]