#1890 - Refactor Profile from data access utility to object abstraction - Milestone 1

        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