Requires I in IIntervalCollection<I, T> to be a class. Struct are probably going to the data structures, and it forces us to otherwise cast collections without any apparent reason.
Tightens up several of the data structures while doing the time complexity analysis. Improved the worst-case runtime on some data structures' methods.