Switch to Docker based Travis builds

This should give us 4GB of memory instead of 3GB and also more CPU
resources
Fix comparison of types in analysis of UNION
Fix TpchColumnHandle.equals() to compare types correctly
Fix comparison of types in AggregationCompiler
Add CLI program to benchmark a Presto cluster
Include both sources in IndexNode sources list

getSources() is meant to return all subplans of a given node as it's
used for various plan-walking activities.
Implement PlanRewriter as a regular visitor

The rewriter interface abstraction is unnecessary.
Replace inner classes with lambdas
Isolate beginCreate/beginInsert plan rewriting logic

It's currently embedded in DistributedLogicalPlanner. This commit
moves it to a separate optimizer in preparation for making the distributed
planner just another optimizer, too.

The current implementation is a big hack that we need to fix eventually.
This logic should be invoked on query start, not during planning. At
that point, the token returned by beginCreate/beginInsert should be
handed down to tasks in a mapping separate from the plan that links
plan nodes to the corresponding token.
Allow internal plugins to register parametric types
Fix output type of learn_regressor() function
Make Classifier a parametric type
Add support for string labels to ML plugin
Add serialization id test for unit normalizer
Fix IntelliJ warnings in MLFunctions
Generalize evaluate_classifier_predictions

It now works with multi-class classifiers and also with string labels
Remove unnecessary synchronization from MLPlugin
Fix IntelliJ warnings in AbstractSvmModel
Fix to add bufferIds for the tasks created during waitForFreeNode

Fixes #2135
Implement HASH_CODE operator for JSON type