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.


Yes. I agree. I tried to refactor but the if conditions were different in various cases. We can try out in a different PR