This generic hash table class is used by Set and Map. It uses
a standard HashMap for storing keys and values so that we can handle
lots of hash collisions if necessary, and a doubly-linked list to support the iterator
capability.
This second one is important because JavaScript handling of
the iterator is completely different from the way that Java does it. In Java
an attempt to modify a collection on a HashMap or LinkedHashMap while iterating
through it (except by using the "remove" method on the Iterator object itself) results in a
ConcurrentModificationException. JavaScript Maps and Sets explicitly allow
the collection to be modified, or even cleared completely, while iterators
exist, and even lets an iterator keep on iterating on a collection that was
empty when it was created..