Make Async.whenIdle() restore context and pass parameters to the callback

@peterflynn 

This pull request adds two improvements to Async.whenIdle():

* Restore context (i.e. `this`) for callback
* Pass parameters to the callback function

Unit tests added.