An interface to represent an encoding.
An encoding is a mapping between a character stream and a byte
stream. It is like java.nio.charset.Charset but has slightly
different form. This can represents some extended encodings like
UTF-8Y which drops (inserts) the BOM bytes before actual decoding
(encoding). This also enables to add some extended encodings such
as ASCII representation used by Java property files.