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 pattern of getting column name is repeated in lots of places in our code. Maybe we should move this to a utility function in HQLParser.

We can do it later in a different PR