Accept queries spanning multiple facts with common dimensions

Changes include : 

* Adds CandidateFact sets in CubeQueryContext, which cover all the measures covered.
* Modifies LighestFact and LeastPartition resolvers to work on candidate sets instead of individual fact.
* Adds MultiFactHQLContext to construct the multi fact query. Refactored earlier HQLContext into DimOnlyHQLContext and SingleFactHQLContext. Created abstract classes which can be used all DimOnly/SingleFact/MultiFact.
* Updated JoinResolver to prune paths of single fact when join clauses are picked.
* CandidateFact carries the ASTs corresponding to the fields selected by the fact.


Need not be public. Actually except CubeQueryRewriter and CubeSemanticAnalyzer class, all other classes can be package private. Will do that change