make the worker selection strategy in remotetaskrunner extendable

zkWorkers is a concurrent map, since those can be hard to work with if you're not expecting them, this should either snapshot the map or the interface should clearly document that the map might be modified as you're reading it.