Adds failing test for stage updates no replacing old configuration in stage groups
Replaces the StageGroup stages set with a map to ensure only one configuration per stage is stored
Ensures StageGroup getters return unmodifiable copies of it's map
Adds a getSize method to StageGroup and uses it instead of getStages().size()
Adds debug logging of result when writing properties
Adds isEmpty() method to StageGroup
Merge pull request #231 from laserval/stage-update-fix

Fixes one cause of #168