Implements a distributed state machine that works directly on top of the object store (e.g. S3) which will allow us to get rid of our dependency on etcd. Please see the source documentation for StateMachine for information on how it works.
Changed the object store API as we now need to be able to specify a bucket and a context for timeouts.
Added more tests for the object store implementations.
This PR: