Group by memory usage improvements

current implementation of groupby uses ChainedQueryExecutionRunner which materializes the filtered ungrouped results in memory causing memory issues when the size of ungrouped data is large, 
Changes - 
1) Made IncrementalIndex.add threadsafe
2) GroupByParallelQueryRunner - runs the query in parallel on the segments and builds incrementalIndex.