Working on removing overlaps in RangeSet
Working on RangeSet merge tests
Added clone method to Datum class and all its children
Intersection logic in Range implementations is incorrect

This commit correctly implements intersection for
    - IntegerRange
    - FloatRange
Modified RangeTests to work with merged ranges.

RangeSet class now ensures that there are no overlaps between
the various ranges that it stores.
RangeTests now reflects this change
Modified Datum.toInt, Datum.toFlt, Datum.toStr methods to avoid
duplication if the underlying Datum object is already of the
required type
Slightly optimized FloatRange and IntegerRange classes
Working on RangeSet optimizations