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
travis: go public and also enable oraclejdk8 for real
Fix travis badge in readme
Merge pull request #569 from uwescience/travis-update

travis: go public and also enable oraclejdk8 for real
PartitionFunction: add serialization test for missing numPartitions
.travis.yml: add comment about caching
Merge pull request #570 from uwescience/fix-profiling

PartitionFunction: add serialization test for missing numPartitions
gradle: upgrade to version 2.0
Merge pull request #571 from uwescience/upgrade-gradle-2.0

gradle: upgrade to version 2.0
SimpleAppender doesn't need to keep EOI tuples
let numTuples() return 0 when null
Only send necessary tuples when using rejoin mode.
Duplicates, for example, are removed in update() and shouldn't be sent
ingest and import query strings should use the correct dbms
fix the problem of casting a MasterSubQuery to a WorkerSubQuery
rename rawDatalog to rawQuery for consistency.
Datalog is not the only possible raw query language.
rename json
missing ftMode for master plan