Avoid writing to freed memory

Both of the `Async` implementations have a problem where the close routine tries to write to memory that was freed - in both cases this was causing glibc to detect heap corruption while running the tests on my system.

Basically the `handle` here is actually the `uv_async_t` object named `watcher` that is part of the `Async` object so we shouldn't try and write to it after the `Async` object has been freed.