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.


This is overridden in subclasses. What is the purpose of this method?