Split CachingGitDataStore in ZkDataStore and GitDataStore
Add profile registry locking. Make ProfileRegistry.getProfile() atomic
Use executeRead/executeWrite instead of generic gitOperation
Use explicit requireCommit/requirePush with GitContext
Only push when there was a commit. Notify on every successful commit
Prepare createProfile/updateProfile for atomic with single commit
Explicitly requirePull through the GitContext
Make GitDataStore.createProfile() atomic with single commit
Make GitDataStore.updateProfile() atomic with single commit
Reset the workspace (hard) before we do a pull
Recursively create/update parent profiles
Recursively create/update parent profiles in GitDataDataStore
Create version atomically in GitDataStore
Migrate getVersions(), hasVersion(), deleteVersion()
Atomic createVersion() from as a copy of another version
Migrate getProfiles(), deleteProfile()
Remove inconsistent API for createVersion(String), createProfile(String, String)
Remove dependency on ProfileService from ProfileBuilders
Remove creation of empty profiles in ProfileTemplateWorker
Assert that the fabric-ensemble-* profiles do not already exist