AS-285: Jobs finish after update (review)

Before this, otter could shutdown before updating job completion i.e. moving server from pending to active in state. Now otter will shutdown after the state is modified and any other logging is done. 

This adds good amount of refactor: `supervisor.execute_launch_config` returned `Deferred` that fired back with job id and completion deferred. The job id was used by `_Job`. Now, it only returns completion and job id knowledge moved to `_Job`. This way code is simpler. 
Complexity is probably a strong word. IMHO, Ying's code adds an extra layer of deferred which I fail to see serving any particular purpose. Following seems to be obvious code to me:
```python
def __init__(self):
   self.job_id = generate_job_id()
def start(self):
   d = execute(a, b)
   d.addCallbacks(success, error)
   self.supervisor.deferred_pool.add(d)
```
instead of above code that has another layer of indirection.