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.
Your environment is exposing the wrong location, likely you are using default command line racket. In DrRacket the location of the actual error is exposed, or you can have the commadline actually expose the error information embedded in the exception. Also contract errors should be caught by contracts and the contracts exist, you just need to enable them.

In my .racketrc:
  (let ((old-error-display-handler (error-display-handler)))
    (error-display-handler
      (λ (str exn)
        (when (exn:srclocs? exn)
          (for ((srcloc ((exn:srclocs-accessor exn) exn)))
            (displayln (source-location->string srcloc))))
        (old-error-display-handler str exn))))