Rculbertson/tombstone rebase

With this PR, we no longer use tombstones. Instead when a job is removed, the master will delete the job from zookeeper. To protect against the case where operational error causes zookeeper to lose all data, or we aim an agent at the wrong zookeeper cluster, we check for the existence of a cluster ID node. If this node is not present, the zookeeper client will throw an exception, and the agent will not sync down the latest jobs.

1) Why do you recommend to add more code bloat than there is already? Function is a minimal unit of reusable code, so obviously functions that got called only from one place are useless, force people to jump around the codebase and should be inlined.
2) Why do you think `while (true)` is better than having an expression-based while? How is it more clear? It was clear before, when the loop condition was visible on top of the loop construct, but your version lacks that clarity.