Graceful worker shutdown

* Finish up any in-progress jobs, then call the callback when at a good stopping point
Expose job id as a string for ease-of-use
Merge branch 'shutdown' into blackboard