Request drains & pausing

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

No need to split into two channels, just make a single channel:

```go
done := make(chan error)
```