Mock setImmediate to setTimeout in tests

Sinon's fake timers are a great tool for testing async behaviour without having to actually wait in tests. However, our `setImmediate` function ends up doing a `postMessage` in Chrome, which the fake timers don't handle.

If we only use `setTimeout` instead, fake timers work.

@SoapyIllusions @ibawt