Add support for specifying comparators in set ops

This commit adds support for specifying comparators in union,
difference, and intersection. The specification of comparators allows
for library users to specify _.isEqual for deep equality or to
specify their own methods that match a subset of paramters. It
also adds deepUnion, deepIntersection and deepDifference functions,
convienience functions that specify _.isEqual.

Under the hood, it actually allows the specification of a "contains"
function into several relevant relevant functions. This is created from
the comparator with a closure. The code to allow this a little cumbersome.
I'm open to suggestions on better methods of passing through a containment-
checking function -- one possibility would be to store the containment
function of the moment on this.

Let me know your temperature for merging these changes.