right now i create multiple channels, which is annoying. ideally, we would have something like:
var channel = new Channel({
concurrency: 5
})
var result = yield channel(task(args))
and task wouldn't actually be executed until a drain happens
nvm don't think that's applicable. however, we should try to create only one channel.