Partial solution to testing async apps

Don't merge - opening this to get thoughts and feedback.

This patch allows tests to return a channel. core.async is used all the
way up the stack so that tests can wait on run-all-tests like:
```
(go
  (<! (run-all-tests))
  (prn "hooray we're done with all the tests!))
```
Two major outstanding problems:

1) because bindings aren't conveyed to go blocks, reporting
   functions (ie, assertions) inside go blocks aren't included in the
   final report

2) calls to (.log js/console) inside tests seem to be swallowed. I
   suspect his is also due to losing bindings inside go blocks.

This is sort of backwards compatible - the documentation never really
does anything with the result of run-all-tests so returning a channel
doesn't seem like serious breakage.