async-wrap: integrate with WeakObject

Making WeakObject inherit from AsyncWrap allows us to peak into almost
all the MakeCallback calls in Node internals.
cares: add AsyncListener support
timer: allow asyncListener to run for each timer

Inline comment explains why.