AS-285 Jobs finished only after updating state

otter was shutting down before updating state on job completion. Fixed this by adding to job deferred to `supervisor.deferred_pool` only after state updation callbacks have been added.  

I am sorry this change has massive test changes since most the tests use `FakeSupervisor` instead of mocked `Supervisor`. This is because mocked one would not allow access to `deferred_pool` public property since it implements `ISupervisorService` which probably shows flaws in the design. Either it should not be an interface or provide APIs to add to the pool. Not sure about the right approach. 
+1 separating out concerns in the test