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
Add tests for the generated code