Fix Issue 10717 - std.ascii.toLower and toUpper should return char inste...

...ad of dchar and avoid me to use a bad cast(char)

Turns out it was working incorrectly for enum types: It was creating enum values that did not match any valid enum.

New semantics are that enums of basic types are also accepted, but they decay to their *original* type.

So: `toUpper` of an enum of `char` returns a `char` (not `dchar` nor the base eum type).

@jmdavis : Assigning to you.