Precompute hashes for nodes that use GroupByHash

    1. Add abstraction for hash generation
    2. Add an optimizer that uses optimized hash generation for
    AggregationNode and DistinctLimitNode
    3. Add helper methods and test for additional hash channel
    4. Add a switch to turn the feature on/off

Note: 
* This PR only addresses operators that use GroupBy. There will be an additional PR that will address PagesIndex
* I will squash the commits to a single commit