3705: generalize PullList module to BlockWorkList

Full description at https://arvados.org/issues/3705
There are a couple of conditions that are exercised in these tests that aren't addressed by refactoring it in the way you've suggested:

1. When `b.Close()` is called, b.NextItem is closed and the `range b.NextItem` loop ends. `expectFromChan` can be rewritten to test that case. But:
2. Two of the tests (TestBlockWorkListReaderBlocks and TestBlockWorkListReplaceList) test various blocking behaviors between a reader and a list manager, which isn't as easily exposed with the generic loop in `expectFromChan`.

You're definitely right that the various channel manipulations in those tests are not well explained, and that either the code can be written more cleanly or documented more explicitly -- or both -- to improve readability and maintainability. I just don't see a good way to exercise those important conditions with the code refactored the way you've suggested.

For now, can we resolve this by filing a story for "rewrite BlockWorkList tests for clarity" or something along those lines?