3705: generalize PullList module to BlockWorkList

Full description at https://arvados.org/issues/3705
I think it would be worthwhile to test "Start worker; ReplaceList(1,2,3); wait until worker has done 3; ReplaceList(4,5,6); wait until worker has done 6" just to confirm/demonstrate that a worker can process the first list, block on the channel, and then resume work when the next list arrives. (Unless of course one of the existing tests does this and I missed it...) [copied from redmine comments]