Use native removeEventListener when replaying DOMContentLoaded asynchronously

Before, we used the wrapped version, which did not find `fire`, and thus could
not remove it. When `fire` ran, it triggered an infinite recursion by triggering
the event it was listening for.

Unfortunately, I haven't yet figured out how to test this one. DOMContentLoaded
is always fired before my call to `replay`.
Wait for async events to complete before continuing replay

Previously, we continued immediately on, which resulted in running through the
remaining events before the first async one completed.
Correctly fix up jQuery events during replay

Fix runtime error when fixing up events during replay. Since it's not necessary
to interpose on `$.fn.on` during replay, remove that code.