Merge pull request #308 from ilikerps/master

Make Max and Min aggs use <=> instead of > or <

Apparently Ruby defines Array#<=> but doesn't have Array include Comparable, so this expands what you can apply the min/max aggs to.
lset#eqjoin improvement -- make user-supplied code block optional.

It's not quite clear what we ought to do here: we naturally want to preserve
both join inputs, but we could do so by producing a pair of tuples, or producing
a single "flattened" tuple. The current behavior is to produce a pair (the user
can always flatten if desired), but that could be changed.
Improve lset#eqjoin; remove lset#product.

Improve lset#eqjoin so that it supports both 0 and > 1 join predicates. When
used with zero join predicates, it computes the Cartesian product; thus,
lset#product is redundant and can be removed.
Improve join benchmark.

Account for materialization behavior of push-based runtime.
Fix non-deterministic test case.

The order of the tuples in a collection is not defined; hence we need to sort
them in test cases that examine collections with > 1 row.
Code cleanup.

Don't explicitly set the `tabname` of the PushElement created for a `pro`
operation; I can't think of a reason why this would be necessary. By avoiding
this, we can make `tabname` a read-only field of `BudCollection`, which is much
more sensible (mutating `tabname` at arbitrary times would be bad).
Improve error reporting for lmap#at.
Improve error reporting for syntax errors on temp collections

Fixes #310.
Improve chaining of notin operators.

Preserve the schema of the lhs relation (the receiver of the `notin` method
call) in the output of the notin. This makes it easier to chain together
multiple notin operators.
Avoid raising an exception with Ruby 2.0

Proper Ruby 2.0 support depends on RubyParser being updated. In the mean time,
with this change it seems as though bud and Ruby 2.0 seems to work fine, except
that you can't use 2.0-specific syntax in Bloom rules.
Enable Travis builds for Ruby 2.0.0
Update README for Ruby 2.0
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.
Fix typo in release notes.
Tweak join code.

Hoist a conditional outside a loop.
Code cleanup for argagg.
Remove redundant (and slightly wrong) documentation.
Allow `nil` for column list in `argagg`.

Previously `[]` was accepted but `nil` was not. Supporting `nil` as well is
harmless and is consistent with `group`.
Code cleanup for joins.