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.


Called it Simple because all the expressions are directly set on the context and it simply writes the hql with ql format. Nothing much otherwise.