Switched from ThreadPoolExecutor to Queue
Switched from ThreadPoolExecutor to Queue

Oldschool pedestrian way to manage worker threads. Advantages:

* This way we can poll the finished workers one by one while we are
  still starting new workers. Which means that we can stop starting
  new ones as soon as one worker fails and thereby enable smooth
  aborting with many targets (up next).
* We get better control over how many threads we create: now at most
  the number of job slots, soon 2x that when we move worker creation to
  its own thread per target.

texttheater/produce,texttheater/produce