Updated Parser's query grammar to be consistent
    Parser was using separate logic to handle constraint queries and
    definition queries. The reason being that, in the constraint
    grammar, the {LEVEL} was external to the query, whereas in
    definition queries, it was internal.
    This patch makes level external to both.

Updated Constraint class to reflect parser changes
    This also gets rid of the annoying double level printouts in
    Constraint's toString() and debugString() methods
Working on adding properties referenced in aggregate definitions
into the related properties map. This is required to correctly maintain
the sets of related properties.
Fixed some bugs in BasicSolver
    While checking for constraint satisfaction, the reference was
    hard-coded as constraint.query().pattern().lhs().toString().
    This has been replaced with something more appropriate.

    Null definitions were being added to the restricted backtracking
    set of definitions. This would occur when a definition was not
    present in any of the Hierarchy levels. Added null check.
Updated ConstraintSolver's static fields and method signatures
Fixed bug in ConstraintSolver.resolveConstraintDependencies()
    resolveConstraintDependencies was overwriting existing values in
    the relatedProperties map. This was causing loss of information.
Updated sample definition constraint_groups to be slightly more complex

Updated sample simple_inbuilt_relation to work with the default properties
Working on fixing QueryResolutionEngine