Use locale overload of std::isupper

ChangeCharCase uses `std::isupper` with `char` -- however, if `<locale>` is included, there is a templated overload of `std::isupper` with a second, non-optional `std::locale` argument, and this template is preferred over the normal `int` version.

http://en.cppreference.com/w/cpp/locale/isupper

This PR explicitly includes `<locale>`, and converts the use of `std::isupper`, `std::tolower` and `std::toupper` to the `std::locale` overloads.