[FABRIC-1100] - Immutable Version/Profile constructs

    Move ProfileService.deleteProfile(..., force) to Profiles.deleteProfile(..., force)
    Move ProfileService.refreshProfile() to Profiles.refreshProfile()
    Move ProfileService.copyProfile() to Profiles.copyProfile()
    Move ProfileService.renameProfiles() to Profiles.renameProfiles()
    Remove dependency on FabricService from ProfileServivce
    Cleanup Profile API. Restore (commented) getIconURL(), getSummaryMarkdown(), getTags()
    Use OptionsProvider instead of Profile instance when building the overlay profile
    Remove ability for the container to return the effective profile
    Remove notion of effective profile from ProfileService
    Immutable overlay/effective profile - first cut
    Use overlay instead of effective profile in ProfileURLHandler
    Allow explicit config substitution in Container.getOverlayProfile()
    Allow FabricService.substituteConfigurations() to operate on an immutable map
    Remove ProfileOverlayImpl - make it private to ProfileService
    Replace ProfileService.getOverlay(String versionId, String profileId) with getOverlay(Profile profile)
    - It turns out that all clients had a profile from which they derived the Ids already
    Remove ProfileService.createProfile(versionId, profileId)
    Simplify ProfileEditAction
    Replace Profile[] returned from Profile.getParents() with List<Profile>
    Remove Profile.configurationEquals
    - Profile equality must always be based on content equality unless we have an identity based on git revision.
    Remove Profile.adapt(ProfileService.class). The ProfileService is now accessible through FabricService.
    Fix rebase conflicts. Remove Profile presentation aspects and binding to Git.
    - This removes Profile.getIconURL(), getSummaryMarkdown(), get/setTags()
    - Profiles is an immutable data structure that is built through ProfileBuilder
    - We need to decide how IconURL & SummaryMarkdown can be part of a consistent/atomic update.
    - So far Profile is independent of Git. Again, we need to decide how the notion of Profile tags can be part of the copy-modify-update model.
   Add Version.getProfile(). Fix DeploymentAgentTest
   Add Version.getProfileIds()
   Remove ProfileMutator from all ProfileService clients - WIP
   Remove reference to ProfileMutator from FabricFacade & ProjectDeployer
   Remove ProfileService.getProfiles(versionId), use getVersion(versionId).getProfiles()
   Cleanup Version API
   Remove ability to adapt immutable Version
   Remove FabricService.getVersions()
   Remove VersionMutator and redo VersionCreateAction
   Add version/profile validation in builders
   Revisit ProfileService.createVersion(...). Use Set<String> instead of List<String> for configuration file names
   Return List<String> instead of Version[] from ProfileService.getVersions()
   Remove ProfileService.profileExists() - duplicated by ProfileService.hasProfile()
   Revisit VersionBuilder and make all code paths go though Profile/VersionBuilder
   Replace ProcessProfile & VersionProfile with immutable version created through ProfileBuilder
   Replace ContainerProfile with immutable version created through ProfileBuilder
   Move profile overlay handling from Profile to ProfileService
   Use ProfileBuilder from ProfileService to create immutable profile instances
   Delegate all Version related methods in FabricService to ProfileService
   Remove deprecated profile related methods from FabricService
   Add VersionBuilder & ProfileBuilder. Make ProfileBuilders & ProfileService SCR services
   Merge VersionService with ProfileService
   Add VersionService.getProfiles() getProfile, hasProfile()
   Add versionId and profileId to all VersionService/ProfileService methods
   Split Version into Version, VersionMutator, VersionService
   Make the ProfileImpl an immutable snapshot of profile data
   Remove Profile.refresh() now accessible through ProfileMutator
   Remove Profile.setOverlays() now accessible through ProfileMutator
   Remove Profile.setRepositories() now accessible through ProfileMutator
   Remove Profile.setFeatures() now accessible through ProfileMutator
   Remove Profile.setFabs() now accessible through ProfileMutator
   Remove Profile.setBundles() now accessible through ProfileMutator
   Remove Profile.delete() now accessible through ProfileMutator
   Remove Profile.setConfigurationFile() now accessible through ProfileMutator
   Remove Profile.setConfiguration() now accessible through ProfileMutator
   Remove Profile.setConfigurations() now accessible through ProfileMutator
   Remove Profile.setFileConfigurations() now accessible through ProfileMutator
   Remove Profile.setParents() now accessible through ProfileMutator
   Remove Profile.setAttribute() now accessible through ProfileMutator
   Add ProfileMutator for all mutating operations @deprecate all mutating ops on Profile