3705: generalize PullList module to BlockWorkList

Full description at https://arvados.org/issues/3705
It's tempting, but in general you can't safely compare two objects of type `interface{}`. Some types are not comparable at all -- for example, maps or slices. If you attempt to compare two interface variables with `==` and one of them holds a non-comparable type, it throws a runtime panic. So I would avoid trying to abstract things this far.

In general the lack of generic types is one of Go's weak points. `interface{}` allows you to get away with a lot of things that you could otherwise do with generics, but it's weak tea.