Fix Issue 10717 - std.ascii.toLower and toUpper should return char instead of dchar and avoid me to use a bad cast(char)

It turns out it was incorrectly working for enum types.

New semantics are that enums are also accepted, and their OriginalType is returned.
rework toUpper/toLower unittests
Merge pull request #1581 from monarchdodra/asciiToUpper

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