Implemented support for delegating the async completion to the 'then' callback function.

I needed this in a project of my own, and I think it's a good addition to the module.

* implementation is backwards compatible
* 'done' is passed to the 'then' callback function
* the 'then' callback function can return true when it wants to handle async itself