node: AsyncListener cleanup and bugs

First remove dead and undocumented code. Hopefully the code will be added again later, but the implementation details will depend on how the `tracing` module is implemented.

Second is the fact that users could add the same AsyncListener instance once they'd entered a new stack, so it would run on both the `currentContext` and the `asyncQueue`. This could compound at each stack level. The main problem being the final run would override the storage cell for all the other ran instances.

The architecture is that the same AsyncListener instance can only be run once in the same execution context, since there is a single storage cell per instance.

Finally, since switching to actual object instances, there is no need to check the `uid` of the object, and instead just compare the object instances themselves.