MultiGroupByAggregate: fix operation during hash collisions

When we had a hash collision on the grouping columns, but the tuples did
not actually match, we were "forgetting" the old match by replacing the
list of "tuples with this hash" with a new list rather than simply
appending the index of the collision.
HashUtils: add, and refactor existing code

Move the hashing functionality from inside TupleBatch to a utility class
so we can use it elsewhere on other ReadableTable implementations.
AggregateTest: test MultiGroupByAggregate with hash collisions
Merge pull request #568 from uwescience/fix-multi-group-by-aggregate-collisions

Fix multi group by aggregate collisions