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
Added MemUsageMonitor class

This class is used to monitor memory activity over time

MemoryTest class now uses MemUsageMonitor
PerformanceTests class now uses MemUsageMonitor

Fixed a faulty method name (IncreasingAreaTest)
PerformanceTests.increasingAreaTest now counts down rather than up
Removed following methods
    - IWorldTree.getAllChildren
    - IWorldTree.getChildrenByClass

These methods meither had a strong use-case to exist,
nor were they being used.

Removed them from WorldTree as well

Removed getAllChildren from MemoryTest class
MemoryTest class now correctly uses Map.materializeConstraints
rather than map.pushDownConstraints
WorldTree.pickValue is bugged!

pickValue is failing when the operator is '<'
This is happening because of HierarchicalSplit picking
lowerBound when the operator is '<'
This leads to an impossible situation at pickValue

Added a small hack to temporarily bypass this
Improved error messages for missing properties

Replaced Map.allNodes with Map.getNodesByLevel

allNodes was found to be consuming enormous memory
With multiple calls, getNodesByLevel can acquire the
same functionality as allNodes

Map.materializeConstraints now iterates through each level
rather than iterating through allNodes
Updates to PerformanceTests
    - No longer uses java.util.Properties
    - Statistics class now extends TreeMap instead of HashMap
    - Added store method to Statistics class
    - Added comments to PerformanceTests.increasingAreaTest
Removed empty string "" from Helper.pieceStrings

Helper.pieceStrings contained empty string "" which was
causing PieceFactory.initializeVisuals to create two
entries for IPiece with interfaces=""
This was leading to random bugs in Tile visuals