Changes to shutdown process.

Worker threads which are currently doing HTTP operations will be interrupted on shutdown as before. But the calling thraed does not wait for the interrupt to be received and processed, it replaces the Worker with a new, un-busy one to speed shutdown

Shutdown from UI thread is now allowed, but the UI thread will not be blocked. Shutdown is complete when workers finish their work.

The number of idle workers is no longer counted with a variable. Instead the number of current Worker threads that have a non-null currentTask is used. This allows more simple and deterministic calculation of the current shutdown state, especially when interrupted workers are replaced