[v12.x] src: use symbol to store `AsyncWrap` resource
Use a symbol on the bindings object to store the public resource object,
rather than a v8::Global
Persistent. This has several advantages:
- It’s harder to inadvertently create memory leaks this way.
The garbage collector sees the
AsyncWrap
→ resource link like a regular JS property, and can collect the objects as a group, even if the resource object should happen to point back to theAsyncWrap
object. - This will make it easier in the future to use
owner_symbol
for this purpose, which is generally the direction we should be moving theasync_hooks
API into (i.e. using more public objects instead of letting internal wires stick out).