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.
I can go either way on this one, but it seems logical to me to always use the component's `clearTimeout` method rather than switching back and forth between that and `window.clearTimeout`.

As I said, I don't have strong feelings about this one so I'll defer to your opinion here, but I don't see this dispose logic as terribly unreadable (looks like this change would ultimately remove one line).