Don't wait for timeout for results to be returned.

Adds a separate error channel for errors, and tracks the total number
of responses returned, exiting early when everything has come back.
Other misc cleanups.
Merge pull request #13 from pkwarren/break_early

Don't wait for timeout for results to be returned.