Massive Changes

Kmap is now a hash table that handles clashing by using std::map from
the stl to store the clashes. This differs completely what was used for
the previous version. This method of hashing is similar to the hash
table used by clojure. Both kmap and the hash table in clojure have
amortized O(1) random lookup. Inserting and deleting is O(log N).
Although it is O(log N), the scaling coefficients are so small that the
behavior at higher N past 10 million resembles O(1) behavior.