Use libuv tty for print().

This makes print async. That's good, but it breaks the async tests
that (wrongly) assumed it was sync.

The Task code could also stand to be cleaned up some.
Get async tests working now that print() is async.

Some tests relied on print() being synchronous.
Merge branch 'tty-print'