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.
You probably want a `ok(timeoutsFired === 1, 'One timeout should have fired');` here also, just in case the first one fails but a later one succeeds