Use std::strings as keys rather than const char*'s

const char* would be better for performance, but as with most of the time
when mixing C and C++ it becomes a memory management hell at some point of
time. Basically it would go wrong as soon as you pass a temporary std::string.
As it would take the c_str() from it, which would get freed as soon as the std::string
is gone (which would be soon as it's temporary). Meaning the system would be free
to give the location of const char* to anyone. Essentially breaking that key.