What to do with the encoding of the handle.
We return new encoding as string to simplify testing, because, it turns out, when you make an encoding with some name, the resulting encoding can have a different name.
The second constructor also contains the old encoding as a proof
that the encoding is set to a new one only if there was a previous
one in the first place. You probably think I am crazy, but I am not,
it is just the simplest way to make the hSetBestUtf8Enc easy to write.
Constructors
KeepDo nothing.
ChangeFromTo TextEncoding StringChange the first encoding to the second.