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.
Extract these values for start, stop, etc. into locals instead of duplicating the logic.