Added enum Type to class Constraint
This is to be used to distinguish whether a constraint
was user-defined or generated during push-down

Updated Parser to include addition of Constraint.Type
Removed a stray ')' in PropertyDef.toString
There were severe flaws in the old way of materializing constraints
    - Lack of Max/Min handling
    - No information propagating bottom-up
    - Several impossible splits while pushing down constraints

The new design aims to resolve these issues while maintaining a
far simpler approach
    - IMap exposes materializeConstraints
    - materializeConstraints pushes down constraints top-bottom
    - This is done all the way upto Tiles
        - At tiles, they are finally materialized

Need to write test cases to ensure correct splits among children

FIXME: There are some issues with bounds.