Note that the optional tests for step 1 now fail because I no longer create a
hash directly in the reader, rather handle this as a reader macro:
{ LIST } -> ( hash-map LIST )
This way, once the constructor has built the hash-map, the hash is now evaluated,
and its evaluation procedure is a no-op.
I'd like to do the same with vectors, but this isn't so easy, as we use vectors
as parameter lists in fn* later on.
ie. we'd have this situation, which is incorrect (and I don't see an obvious workaround)
(fn* [params] body) -> (fn* (vector params) body)