Use unsigned char as the basic "byte" type.

This will help to improve security, because the signedness of unsigned
char is always "unsigned", while the signedness of "char" depends on the
compiler.
Add an image codec class for compression/decompression.