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
Does this really add any test coverage? If not, let's remove it.

Also, let's move these tests to a separate file. I suggest a file that covers any of the async handling. We could rename async.js/html to something else and use that.