REL-1436, REL-615: QPT bug fixes caused by faulty comparison of Alloc objects.

A faulty comparison (based solely on compareTo of Interval) in Alloc objects caused a variety of problems when Alloc or Marker objects were stored in sets because Allocs that covered the same time interval were considered equal and therefore removed from the set. This fix addresses two issues:

1) After cutting and pasting observations from one variant into another one the corresponding problem markers were lost (unless one of the observations was moved around so that it covered a different time interval.
2) If two observations with the same duration were put on top of each other one of them vanished from the variant because it was  removed from the underlying AllocSet.

There are probably more elaborate/cleaner ways to fix this but I was trying to find a fix that is as local as possible in order to minimize the risk of unwanted side effects.

Yes, this is a design problem. Comparison, equality, and hashing can't be defined consistently in the presence of  subclassing, so you're never going to come up with a solution that makes both `Set<Alloc>` and `Set<Interval>` behave the way you want; the solution is to make `Interval` final and then change the existing subtypes `Block` and `Alloc` to have an `Interval` as a member, and change `Union` to use `Interval` specifically rather than `T extends Interval`. This way each type can have a single consistent ordering behavior that can't be misused.

Subclassing `Interval` really makes no sense with the current design; it needs to be F-bounded `Interval<A extends Interval<A>>` where all subtypes to implement `plus`, etc., because those methods just return `Interval` now. I didn't understand types well enough to do this correctly when I wrote it, sorry. Best to just make it final and be done with it.