This resolves #58.
We previously would just kill the worker usually in this condition, but there was a rare situation where we would run on an interrupted thread (must be interrupted after added to availableWorkers, and given a task before it checks for the next task).

This change makes it closer to ThreadPoolExecutor's behavior.  We reset the interrupted status always before starting the task, and will only kill the worker if the thread pool is trying to shut down.