3705: generalize PullList module to BlockWorkList

Full description at https://arvados.org/issues/3705
Added a test that the reader will block if it reads prematurely from an empty BlockWorkList. But I don't think there's a lot of helper code that needs to be abstracted out?

By the way, I strongly prefer when possible to keep the t.Error and t.Fatal statements within the test that's exercising them, rather than pushing them into helper functions. t.Error and t.Fatal and friends report really useful information about which line of code broke the test. That's masked when they're called from a helper function, so I'd rather write helpers to return true/false and have the test function itself be responsible for signalling a test failure.