context: one event loop per virtual machine

Previously, the event loop was stored as a shared global. This makes multiple Nodelike contexts dependent on each other in some cases.

We now store the event loop in the virtual machine for the context, just like the process object.
Revert "Revert "tests: add some asynclistener tests""

This reverts commit 15d95b23ddf6b6a9da2a1e4e5536aa3f0ebaf223.