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().
Hum, actually this case should never happen. Because `CharsetDecoder.decode()` cannot return `Underflow` if `endOfInput == true && inBuf.hasRemaining`. It would convert that case to malformed automatically [here](https://github.com/sjrd/scala-js/blob/charsets/javalib/src/main/scala/java/nio/charset/CharsetDecoder.scala#L90-L98).
So I guess an `assert` is in order instead.