Query Results Cache

Caching the query result sequence in form of byte[], improving the performance of repeated queries and reducing load on druid broker.

Cache will ignore the queries which intervals beyond current time, as they are bound to have different results later on.

Performance results for the three cases. The queries were generated randomly should be more than 1k queries (as per the stats)

1. No segment-level and query-results caching
2. No query-results caching but with segment-level results caching
3. Both caching turned on.

Case	|	Broker CPU	|	 Compute CPU 	|	 Response Time 
testCache	|	 0.78 	|	 0.48 	|	 4.28 
testNoCache	|	 0.53 	|	 65.30 	|	 2,296.28 
testNoQueryCache	|	 19.10 	|	 0.79 	|	 100.99