Async: Tests are now Promise-aware

Fixes #632.
Ref #534.

I'm **not** loving how un-DRY the `Test#run` function is... but that's not _new_, only exacerbated by this PR.

Criticism or other suggestions welcomed, as usual.

cc: @domenic @stefanpenner
This duplicates too much code. While prototyping an implementation for #633 with @leobalter, we extracted the duplicated code into new methods on `Test.prototype`. I suggest doing the same here. You still need to come up with a name and make sure that stacktraces are correct - we probably still have no tests for that.