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().
Yes it can. This can happen if the constructor with a `CharsetDecoder` is used, and we're given a decoder with one or both of its error actions set to `REPORT`.