Overhaul of job cancelling.

The LWR use to not make a distinction between cancelled jobs and complete jobs but with server side postprocessing it is more nessecary. Bugfixes including actually recording and use cancelled status in external job runners and persisting the the recorded cancel status in queued and unqueued Python job managers (in some conditions it would revert the cancelled and mark the job as complete).

Catch and suppress exceptions related to cancelling jobs and fetching that status. Failure to ping the metadata store (disk) and determine if a job has been cancelled shouldn't be interpreted as a failure to cancel.

Lots of refactoring and tests to support this.