#3 Rename Controllers to Managers. With Manager objects lifetime extended (owned by root, not mode) they are virtually the same.
#3 Create foundation classes and interfaces.
Fix #4 LStr: initialize format argument array.
Hold #2: we can live without these functions.
Merge branch 'feature/new-lse-utils' into feature/lse-root-obj
#3 Rename CoreLocomotive to RootLocomotive to remove unnecessary different naming.
Close #3: Add Mode classes and mode handling code in Root.
* LseBotMode is LseSimpleMode.
* Add LsePersistentMode to allow some code run regardless of active mode (ie for horn sounds).
* LseCoreLocomotive is LseRootLocomotive so we dont have core/root name mess.
* LseRoot is final. User code must be implemented in modes.
* Might want to add CurrentModeChanged callbacks in persistent mode.
* Modes are referenced using exact classes since abstraction will most likey obscure necessary details of each mode and introduce tedious casts. There is going to be 3 base mode types, so we are fine.