Make decoder work with byte arrays containing a single complete text,
instead of byte streams with several separate texts.
Moved codecs into "Text" category.
Add method for checking whether certain `Text` is empty (`none` or has
zero recorded characters).
Add methods for converting and deallocation (in the same action) passed
`Text` value into the `string`.
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.
Added more conversion methods from primitive types (`bool`, `byte`,
`int`, `float`) into `Text` and `MutableText` into the standart
`TextAPI`. Made `JSONAPI` use these methods instead.
This is a giga commit, something that should not really be done with
git, but I messed up.
This commit brings a great amount of changes, most important is
reworking `TextAPI` and alsmost complete replacement of `string` with
`Text`/`MutableText`.
Another huge change is introduction of command system that allows to
define commands in a centralized manner, handles auto-parsing of
their parameters and auto generates help info.
Lastly, JSON data types were replaced with new
`DynamicArray`/`AssociativeArray` that are better designed and more
generic.