3705: generalize PullList module to BlockWorkList

Full description at https://arvados.org/issues/3705
I wonder whether the "what to do with trash" details here detract from the explanatory value of the pseudocode ("how to use a BlockWorkList"). Perhaps the trash pseudocode should move to the appropriate redmine page or a trash_collector.go file for further discussion/refinement, and this explanatory comment section should just say stuff like "do the required work on this item" and "when ready to perform work, we fetch the next item like this:"? (Of course, trash is one of the 2 reasons we want BlockWorkList so it's certainly worth paying attention during review to whether this module is actually useful.)