Only perform a single synchronous update inside animation frames

To fix jitter, commit d57119793bf3f01c94700e2ad4208eac2a71879f changed `requestUpdate` to always perform updates synchronously inside of a `requestAnimationFrame` callback to avoid the use of `nextTick`. However, that changed exposed us to performing multiple redundant updates inside of an animation frame, which hurts performance.

This PR updates the strategy to pause all updates during the animation frame. Then, after the frame's callback, if any updates were requested we perform a single synchronous update. This ensures a maximum of 1 update per frame no matter what.