Implement the standard Charset encoders and decoders.

* US-ASCII
* ISO-8859-1
* UTF-8
* UTF-16 BE/LE/auto

This also fixes #1087: String.getBytes().
The comment is a bit misleading. First part: it *writes* data to the buffer between the limit and the capacity. Second part, too many indirections leading to wrong statement. Consider rewording to something like:
"Note that this stores the new data after the limit of the buffer. Further, note that we may read more bytes than strictly necessary according to InputStreamReader's specification".

Second part: