process channels in asynchronously
process channels in asynchronously

previously we'd read a channel, then loop over the channel's requests.
this meant that if another channel was opened, we'd never process it, so
things may deadlock (possibly the entire connection as bytes would not
be read).

concourse/concourse,concourse/concourse,concourse/concourse,concourse/concourse,concourse/concourse