Precompute hash for nodes that need hash

    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

Microbenchmarks: 
GroupByHash https://gist.github.com/nileema/2010aa90023dc0cce6d8
HashPagePartitioningFunction: https://gist.github.com/nileema/58e08ef66aed0c3209ef

I know this will make the diff much bigger, but rename `channels` to `hashChannels`.  The code is really hard to read with it as `channels`.