Move BitSet utility methods into their own class, BitSets.
Add a variant of PushFilterPastJoinRule that applies to a join without a filter.
Fix https://github.com/julianhyde/optiq/issues/69, "Can't join on string columns".

 We now push join expressions down to the inputs of the join, to keep the join condition as simple as possible. In issue 69, the string columns had implicit casts, and those were sufficient to gum up the works.