decoupled some of our types to the util collections classes

- the object signatures make typed equality comparers impoossible :(
group by query green bar!
- I did need to make use of the comparing set, theres a lot of "tracking" overhead in the existing group-by algorithm.
- the use of a set for "has this element been seen before" is a masterstroke. I wouldn't have thought of using a set if it weren't for compilers.
- added a test for the 2nd of the 2 lazy cases (1st is new-group, second is exsiting-group-new-member)
- :D
- also! this commit pretty well resolves the problem of equality comparers. I've got a solution: basically I'll split Queryable away from the existing collections framework in its contains(Object o) method (creating my own containsElement(TElement e) method). This will allow me to safely consume Typed-Equality comparers in a pollution-free setting,
- I dont actually know how helpful it is to allow for a custom equality comparer. But we'll see.