Switches from std::unordered_map in physaddr_t to a drcontainers hashtable to avoid malloc and make things safe for statically-linked drmemtrace.
Similarly, switches from std::ostringstream to dr_snprintf in physaddr_t::init() to avoid malloc.
Tested on a multi-threaded app which hits the post-init malloc warning without both fixes (test will be added in a forthcoming PR: it cannot be added now as physaddr_t is not thread-safe yet).
Issue: #4014