SimDictionary improvement

Includes #892 with tweaks. In comparison to that PR, I inverted the use of the `#define` so that it defaults to the old behaviour, and adding a define enables the new. This plays nicer with existing projects and the current CI setup (which needs to be fixed).
Ah, actually that won't be feasible unless you want to take this opportunity to merge the `SimIdDictionary`, `SimManagerNameDIctionary` and the `SimNameDictionary`, I think. Since the new dictionary type is used inside all these classes it needs to be defined outside them... or in one which we pick and then make available to the others :/. I think for now let's not worry, and we'll revisit this later when we can take the time to understand the 3 classes and why and how they're different.