Removing some logging, as multiprocessing does not support logging from the spawned processes

Doing logging from spawned processes requires a specialized logger. That is not needed right now.
SendorWorker has its own process management, and supports cancellation

multiprocessing.Pool is convenient but it does not allow for cancellation of tasks in-flight. Therefore SendorWorker has been rewritten to manage its own set of processes.

Each process has a timer and a cancellation event which is checked from its own threads. If there is a timeout or the cancellation event, then the main thread in the process will signal failure and done to SendorWorker and then exit. After signaling done, the process will not write anything more to the output queue.

SendorWorker gives each process a short amount of time after the done-signal. If the process does not terminate within that time, the process is forcefully terminated.

This design has been chosen to minimize the risk that the worker processes corrupt the output queue when a timeout or cancellation occurs.

SendorQueue does all queue management and tracks jobs which are not yet being worked on and jobs currently being worked on separately. This allows for cancellation of jobs which are not yet being worked on (these will never reach SendorWorker).

The UI has cancellation buttons too.