ENH: partial reorganization of HashTable internals (#1160)
- relocate the pair_entry (HashTable) and unary_entry (HashSet) into the Detail namespace and add output handling. The output handling at this level removes the reliance on zero::null output (HashSet) and allows direct support of pointers. This means that the following now works HashTable<T*> tbl; os << tbl; It also means that we don't need to overload operator<< for HashPtrTable anymore. - avoid delete/new when calling HashSet::set(). If the entry already exists there is no reason to remove it and add another one with the same content. STYLE: HashTable iterators now have a val() method - identical to the object() iterator method, but shorter to type.