Request drains & pausing

Closes #65. Closes #56.

This brings the TCP backend closer to HTTP, as well as implements backend pausing and request drains. 

If more than one of these fails, it will leak trying to send here. Instead, I'd drop the waitgroup, and just use a single `chan error` that has a buffer of `len(services)`, then just receive len times or until you get an error.