Async: Make tests 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
It covers the implied `else` branch (which doesn't exist).  I'm not sure if that changes the coverage _numbers_ in Istanbul but it definitely changes the HTML report as it shouldn't show an uncovered implied `else` branch anymore.