Avoid using static unordered_map (#1304)

unordered_map is not POD. Using it as static may cause problems
when operator new() and operator delete() is customized.

Also changed some function signatures to use const char* instead
of std::string, which will give caller the flexibility to avoid
creating a std::string.
diff --git a/source/enum_string_mapping.cpp b/source/enum_string_mapping.cpp
index ff40bd8..e993b58 100644
--- a/source/enum_string_mapping.cpp
+++ b/source/enum_string_mapping.cpp
@@ -14,7 +14,9 @@
 
 #include "enum_string_mapping.h"
 
+#include <algorithm>
 #include <cassert>
+#include <cstring>
 #include <string>
 #include <unordered_map>