Correct std::tolower warnings under MSVC2017.
Using std::tolower with std::string actually can cause undefined behavior, and only MSVC 2017 looks to complain about it. You can find more information on the exact reason at: http://en.cppreference.com/w/cpp/string/byte/tolower