fix(scheduling): use two-phase commit for scheduling decisions

After an Engine schedules a Job, the target Agent must respond
by clearing the TTL from the /.../target key in etcd. If the
Agent does not clear the TTL in time, the Engine will respond
to the expiration of the key by reoffering the Job.

Fix #500