WIP
---------------
System overrides is currently a concept applied to ID pointer properties, a way to say 'this override data is different than its linked reference, because override system needs it, not because the user defined it as different'.
E.g. if, in an override, a RNA property points to a different ID than in the reference linked data, but that ID is an override of the one pointed to in the linked data, then this is a system override.
The idea of this tasks is to extend this principle to entire IDs, which would then behave from the user point of view essentially as non-editable, linked data.
Typical usecase would be the collections of a character. They need to be overridden so that the key objects of the character can also be overridden and edited/animated, but user should not actually ever manually edit those collections.
------------------------
Main tasks:
[] Define an icon for system overrides.
//Very early tentative idea: transform the underlying link in a key: {F12868484} Could also try to add a lock, but think it would make the icon overloaded? //
[] Define & implement low-level technical aspect (most likely simply one new liboverride flag).
[] Define and implement default behavior (what is by default a system override vs a user-editable override).
[] We probably need some sort of 'overridable anyway' properties, e.g. visibility etc. flags of collections?
[] Implement hierarchy override from ID widget.
[] Update various low-level checks to define 'generic common Blender behavior' regarding those system overrides (maybe refactor or extend the `ID_IS_LINKED` usage?).
[] Hook this new concept into the Outliner UI.