TODO
----

  - If operator=() is used on hash based collections it doesn't try to
    optimise things by using existing table space if large enough. Make
    this more intelligent.

  - Copy constructors of hash based collections can get initial table
    sizes from collection being copied.

  - Allow hash based collections to take a constructor argument which is
    a hint at the lower bound on the number of items they may hold. This
    will modify the low threshold below which the hash index will not be
    shrunk. Can this be used to set the initial index size as well. ???

  - Add OTC_HashTable. Simple map for int to void*. Also, consider
    other low level data structure classes such as SList and DList, and
    maybe a bounded list based on a vector.

  - Provide shallow copy equivalents of copy constructors for collections.

  - Allow collections which don't require items to be unique to take
    an OTC_Iterator in the constructor.

  - Add note to shallow copy constructors that use in ObjectStore
    application needs to be restricted to being within transaction.
    May have to have checks for read only transactions like with
    iterators. Tricky.
