Split code into two distinct modules

This slightly reorganizes the code.  It now contains two standalone modules.  One that does the low-level monkey-patching and exports a minimal wrapCallback API, and one that implements the `process.addAsyncListener` API on top of that.