Switch `setImmediate` implementation from using `MessageChannel` as an async deferral to `Promise.resolve().then()`.  This is [much faster](https://esbench.com/bench/55d4d44e2efbca1100bf7251), *however* it comes with the caveat of being unusable for animation.  While this matches the use-case for `setImmediate()` within Preact, which is simply to debounce rendering, it means that componentDidUpdate() and setState() callbacks should no longer be used as a means of animation. This is only true when using the built-in debounce mechanism, overriding to requestAnimationFrame is still sufficient for all other cases.
Switch `setImmediate` implementation from using `MessageChannel` as an async deferral to `Promise.resolve().then()`.  This is [much faster](https://esbench.com/bench/55d4d44e2efbca1100bf7251), *however* it comes with the caveat of being unusable for animation.  While this matches the use-case for `setImmediate()` within Preact, which is simply to debounce rendering, it means that componentDidUpdate() and setState() callbacks should no longer be used as a means of animation. This is only true when using the built-in debounce mechanism, overriding to requestAnimationFrame is still sufficient for all other cases.

neeharv/preact,developit/preact,gogoyqj/preact,developit/preact,neeharv/preact