Defer to the event loop after testing each Listener

In the event of an entire middleware stack that never defers to the
event loop (or no middleware at all), an extremely long stack trace
builds up (each listener building on the last). Instead, we defer to the
event loop after testing each listener, resulting in much more
manageable stack sizes. This should not change effective behavior of
listener processing unless a script relies on all listeners being
evaluated in a single turn of the event loop (which is already really
bad).