The IntervalTree now holds the value in the Node instead of in the
Interval[T].  So now the Interval class is no longer parametized; it
only holds the lo and hi endpoints.

This makes for a nicer interface to clients.  Before, when calling
intersects, the client had to provide a value to the Interval.  However,
we usually want to query with just the endpoints and not worry about
including a value in the query.  Putting the value in the Node instead
alleviates this quirkiness.  This also may be cleaner conceptually,
separating the concept of an interval from the concept of the value in,
or associated with, the interval.  However, the purpose of putting the
value in the Interval class in the first place was to emphasize the idea
of the value in the interval.  So we can conceptually go either way...

The issue that forced the change was that we could not make a call such
as

	intersects(new Interval(lo, hi, null)).

In this case the compiler complained that since Interval[T] is
invariant, we cannot pass null as the value since Nil <: T for all T.
It suggested to make Interval[T] covariant.  But doing this caused
problems with equals method for Interval.  Outside of my skill set at
this point, I had to change to this version.