Better timeout handling

Right now, each time we create a timeout or interval within an instance of the player, we must also set up `dispose` listeners to clean up those timers. This PR adds a `setTimeout` and `setInterval` method on the player that behaves exactly the same as those native functions except they automatically add the dispose listener.
In think there's a way you could do `this.componentClock` here, and use that in the tests, if you wanted to avoid the global.