Serialized String comparison, Unicode support

The StringComparator now works on serialized data.

To this end new string read/write/copy/compare methods were introduced, which use a variable-length encoding for the characters.

key-points:

    The most significant bits are written/read first.
    The first 2 bits of the character are used to encode the size of the character.
    A character is at most 3 Bytes big.

Additionally, the StringSerializer now has full unicode support. i couldn't find a unicode character that uses more than 22 bits, as such 3 Bytes should be sufficient.