workers: don't use a Queue() but an array() + semaphore. This way, pending workers can be browsed if needed

Signed-off-by: Jerome Flesch <jflesch@gmail.com>
Whenever a worker is started, check if the current one can be paused. If yes, pause it and readd it to the end of the worker queue

Signed-off-by: Jerome Flesch <jflesch@gmail.com>