[FABRIC-1100] - Immutable Version/Profile constructs
Review FabricService.getDefaultVersion(). Add FabricService.getDefaultVersionId(), getRequiredDefaultVersion()
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