Implement progress to NanAsyncWorker.

This builds on NanAsyncWorker by providing a NanAsyncProgressWorker which can dispatch progress information back to the originator.
As Ben said on the previous PR:

>Maybe lock and unlock the mutex before destroying it. If another thread has the lock, then this thread will block (giving off a clear signal that something is wrong) instead of entering undefined behavior territory. Something like this would work as well:
```c++
> if (uv_mutex_trylock(&async_lock)) abort();
> uv_mutex_unlock(&async_lock);
> uv_mutex_destroy(&async_lock);
```
> Libuv will abort when pthread_mutex_destroy() returns EBUSY but that only happens when it's compiled with !defined(NDEBUG) && defined(PTHREAD_MUTEX_ERRORCHECK) and even then, pthreads does not guarantee that all error conditions are caught.