Asymmetric join and distinct.

1. Make join asymmetric; now builds only RHS into hash table, not both sides as at present. This should improve performance, especially when we change Optiq to put large relations on the left.
2. Implement Enumerable.distinct() and .distinct(EqualityComparer).
3. Add implementation of EqualityComparer that uses a selector function.