Precompute hashes for nodes that need hashes

1. Add abstraction for hash generation
2. Add an optimizer that uses optimized hash generation for all nodes
that use groupByHash and lookup source
3. Modify operator test to run for both with and without hash generation enabled
4. Add a config option and session property to turn the feature on/off
Make JsonType comparable
Merge remote-tracking branch 'upstream/master'