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().
I defined `toString` in `Buffer`, once and for all (except for `CharBuffer` which must respect a more precise contract).

For `compact`, it's intentional. There are other things that are not implemented. The commit message says it's *part of* `ByteBuffer` and `CharBuffer`.