Fix framerate issues by reworking rerender event

Before the rerender was triggered via a timer. The timer has
enough overhead that the framerate rarely reached 60.

This commit switches to using the naive solution of delaying in
the event loop (what the timer tried to avoid), but first ensures
that there are no events immediately available for processing.