Adds the ability to cancel scans that are being processed. The taken approach allows us to cancel an individual scan without affecting other scans, even when running with multiple workers. This is because of sending a SIGUSR1 signal to the task which causes an exception which can be handled, rather than terminating the entire worker. From my local testing it seems that scans which run in parallel are unaffected.
This required a few changes:
I had to make the cancel button quite small to fit in the normal line of the scans.