Fix a lock race and a data race in cleanupLoop
Fix a lock race and a data race in cleanupLoop

Cleanup loop was leaking the the lock around jobTracker.jobs because
it tries to grab it twice; once at the top of the method and once in
deleteJob or saveJob.

Additionally, there was a possible data race where we could be
removing fields from newly-partial jobs while another thread was
updating them. To fix that, we construct a new job object and swap
it in.

stripe/timberlake,stripe/timberlake,stripe/timberlake,stripe/timberlake