TemporaryJobs writes state to disk so jobs can be cleaned up by subseque...

...nt runs.

If a run of TemporaryJobs is killed off while jobs are still deployed,
they will be left running. This can lead to a lot of abondoned jobs still
running. To prevent this, TemporaryJobs now genereates a random string for
run, and uses this as a prefix for each job name. This string is written
to disk as the name of file in /tmp/helios-temp-jobs. When TemporaryJobs
starts, it will read all files in this directory, and delete all jobs
which start with the prefix. If TemporaryJobs runs to completion, and
all jobs are undeployed successfully, the temporary file will be deleted.
Might delete() ever be called twice? Then we might want to synchronize it and assign `null` to `fileLock`. Otherwise we'll get exceptions when we try to double-release.