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.

Small change in variable names in WorldTree constructor
Added removeConstraint method to IWorldTree
Fixed a NPE bug in WorldTree.getAllChildren
Added method ITile.setPiece
Implemented this method in WorldTreeFactory.Tile

WorldTreeFactory has some minor optimizations
    - Constraint constructors now use default size 0
    - Tile.artifacts uses default size 0

Updated Region.initRegion method to use Tile.setPiece

WorldTreeFactory.materializeConstraints now contains some
commented code that removes all program-generated constraints

This method has been left commented as its
increased space complexity is insignificant (~3K per 2000 Tiles)
Modifications to tests
Wrote separate method to pick a random value based on
constraints, bounds and DatumType - WorldTree.pickValue
Added development.com.collection.range package

This package consists of classes that implement the concept of
Ranges

Consists of two classes that extend the abstract class Range
    - IntegerRange
    - FloatRange

Currently, Ranges allow the following functionality
    - contains
    - intersection
    - add
    - span
    - generateRandom
    - clone

Range addition currently works only for the same types

PropertyDef.RandomSpec now uses Range class
Updated Parser and WorldTree to reflect this change

WARNING: This patch breaks the existing WorldTree.split method
Added small but necessary check in pushDownConstraints break case
Moved Tile's string methods so that they all appear together

Tile.updateVisuals method reloads artifacts everytime
However, artifacts was not being cleared
This led to same property being displayed several times per tile

Added artifacts.clear() to Tile.updateVisuals
Updated ParserTest to work with newer code layout
Fixed a bug in Coordinates.stringToArray()

Added Coordinates.stringToCoordinates()

Tile.neighbour uses Coordinates.stringToCoord
instead of Coordinates.stringToArray
Added development.hierarchical_split package

This package consists of HierarchicalSplit class that is used to
split constraints into sub-constraints

HierarchicalSplit uses query resolution to identify
valid children as per the property definitions

Currently, HierarchicalSplit only supports splitting of aggregates
It is yet to be decided whether other definition types
are to be supported

Updated WorldTree to use HierarchicalSplit instead of
the old buggy split logic
Updated CHANGES one last time
Renamed properties in the properties file for easy generation
Changes to WorldTreeFactory to make it more compatible with
clean performance tests

Fixed a NPE bug in WorldTreeFactory.newMap
Added MemUnit.getFreeMemory method
Added test.performance package for performance testing
HierarchicalSplit.split is bugged due to
bad logic to identify columnName