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.
OK, no it's not, but the doc for the `@returns` implies it is.