added ComparingLinkedHashSet, & associated code
- ComparingLinkedHashSet is a hack on top of the LinkedHashSet which is a hack on top of HashSet which is a Hack on top of HashMap
- not sure how i feel about this rickety tower of hacks. probably reasonably correct though.
- the strategy is to compose (wrap) the objects inside the hashset in other objects that allow us to define a custom equals behaviour. The class that does that is the newly added "EquatableReference" object.
- included some really disgusting code around what to do when we have a type miss-match. Basically it boils down to throwing an exception before we introduce a polluted heap.