3705: generalize PullList module to BlockWorkList

Full description at https://arvados.org/issues/3705
Hm. I'm not entirely comfortable with that. Currently it would work because list.Element includes a pointer to its parent list.List, so holding on to an item is enough to prevent the list itself from being garbage collected. But it depends on the internal structure of list.List, which could decide to drop that pointer at some implementation point in the future. If there isn't a strong reason to drop the current_list storage variable, I'd like it to stay in as a lexical reminder that the listener now owns the list.