Refactor: Redefine `Map(T)` as a more generic `Map(T, U)` macro

To replace `Map(T)`, a new macro `PMap(T)` was defined as `Map(T, ptr_t)` for
writing maps that store pointers with less boilerplate
Merge branch 'generic-key-value-map'