TimeInterval refactor and TimeIntervalCollection cleanup

This is a pretty straightforward set of changes.

 * Refactor `TimeInterval` to match other Core types.
 * Clean up `TimeIntervalCollection`
 * Update everything else to still work.

Rather than looking at the diff, it's probably easier to just review TimeInterval.js and TimeIntervalCollection.js as if they were new files.  Everything else is just updates to API changes.
Might be better to invert this `if` and early return, to save indentation through the rest of the function.