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().
Absolutely. I took it from Harmony, and it seemed that this supported the fact that the JDK won't write out the BOM of UTF-16 for an empty input string. But maybe this is not the right place to do that (maybe UTF-16 should take that responsibility). But I don't know how to test what's the proper scenario here.