Refactor signal/slots system for more efficieny and better user
interface that allows to disconnect receiver like so:
`OnEvent(receiver).Disconnect()`.
`Feature` is now derived from `AcediaObject` and has an optional ability
to spawn an auxiliary service to compensate (service provides it with a
relatively easy access to an `AcediaActor` object, which can store other
`Actor`s).
`AssociativeArray` by design does not manage keys, automatically
deallocating them, like it can with stored values. This patch adds a
parameter to `Empty()` method that allows it to deallocate all of the
used keys when deallocation all of the values.
As a side effect this patch also fixes a bug that broke
`AssociativeArray` after using `Empty()` method.
There wasn't actually any need for `InitializeStatic()` method. In fact
it could lead to problems. Now calling `StaticCosntructor()` is allowed
instead.
Adds additional methods fo rconsole output, also changing how the old
one worked: now most methods do not output player's name in front of the
message, but `Say()` method was added if such behavior is needed.
Additionally fixed issue with `PlayerController` actor being stored
inside `ConsoleWriter` object before.
Now all objects only have to calculate their hash code once and it's
value will be stored for later `GetHashCode()` calls, since has code is
not suppoed to change during their lifetime anyway.
Now `LoggerAPI`, instead of simply loggin messages by itself, uses
logger objects (deriving from `Logger` class) to output log messages for
it (previous way of logging by `Log()` method is available by
`ConsoleLogger`).
Multiple loggers can be configured per each log level, which can be done
via config.