Force explicit work completion
Before, workComplete() had to be called by descendants of AbstractWorker; otherwise the worker hung around in a zombie state.
But it's easy to forget to call workComplete. By making doWork return an enumeration, the descendants of AbstractWorker
need to be explicit about whether work is complete, or work is in progress and the worker should continue to live.