Code cleanup.
Fix error in join processing.

When the same table + column name appeared on the LHS of multiple qualifiers in
the same join operator, the previous coding produced the wrong results. That is:

    (foo * bar).pairs(foo.x => bar.y, foo.x => bar.z)

The problem was that `foo.x` was implemented by calling a class method that
returned a `[tbl_name, column_offset, column_name]` triple. Using the syntax
above, the set of join qualifiers is given as a hash literal, with the LHS of
the join qualifiers as the keys. Hence the rule above yields two equal keys;
Ruby just picks the key/value pair that appears last, so we would effectively
ignore the `foo.x` qualifier in the rule above.

Fix this by having schema accessors return an additional unique identifier; this
ensures that calling a schema accessor multiple times yields values that do not
compare as equal. Not terribly elegant, but I couldn't see a better fix.

Fixes #313.