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. 
Your idea about making this (as per IRL conversation) synchronous is a really good one.  :)  Not sure if that's in this PR or if you were going to do it in another, though