Use locale overload of std::isupper

ChangeCharCase uses `std::isupper` with `char` -- however, in `<locale>`, there is only a templated overload of `std::isupper` with a second, non-optional `std::locale` argument.

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.