Aliases were initially using `Actor`-base objects to manage themselves,
but that became a legacy approachin AcediaCore and they had to be
reimplemented without any `Actor`s (based on `Feature` instead),
allowing them mto be usable even when no `LevelCore` is provided.
When `HashTable` was told to replace an object with itself, it ended up
incrementing its reference count because of the legacy equality check
(previously `FreeSelf()` completely deallocated an object, so the check
was warranted).
Some mutators use mutate specific mutate commands "help", "version",
"status" and "credits" to ouput info about themselves.
Before this patch commands complained that there wasn't first three of
them. Now it doesn't complain.
Previously settings about side effects were scattered through different
relevant classes.
Now they will all be recorded in a single config object.
Additionally, log messages about both success and failure of introducing
these side effects.
Now `AcediaGameRules` are only added when Acedia actually needs their
events.
AcediaCore now also outputs console message about adding them and
registers a side effect.
This patch changes AcediaCore to only inject `BroadcastEventsObserver`
when its events are actually needed.
Other changes are making this change produce a log entry and adding a
relevant `SideEffect` that describes this change.
AcediaCore is moving towards separation of all of its functionality into
3 big groups: general, client-specific, server-specific. And files will
be rearranged into `BaseRealms`, `ClientRealm` and `ServerRealm`
accordingly.
Additional directory `CoreRealm` is meant to contain functionality and
base classes common for both `ClientRealm` and `ServerRealm` ones.