Asynchronous test functions with continuations.

Allow spec function argument to be used as "done()" function or as "async" object with done() and continuation() members. async.continuation() wraps a given function so that it can be called asynchronously with the same user context (this) as the spec function from which it was constructed.

Errors thrown from within a wrapped continuation function should also be handled in the same way as they would have been if thrown from the spec function. I have not figured out the appropriate way to add test coverage for that though (so it might not be working) and I expect this PR to not be acceptable for merge yet for that reason. I'm making the PR now though in hopes of getting feedback on what I have done so far (including tips on how I should add the missing coverage).