3705: generalize PullList module to BlockWorkList

Full description at https://arvados.org/issues/3705
I like my way more :)

I think there's still too much channel processing in your tests, which makes it harder for readers (and writers) to reason about what's going on.

The nice thing about removing the channel processing and error reporting boilerplate to helper methods is that it distills the tests to just their fundamental behavior, making it much easier for the reader to grok what's going on.