Map api

1. Modifies way maps internally fetch values.
2. Adds new methods `Has` and `Erase` to `MapObject`.
3. Adds two new API methods to `Map` class: `pop` which is used to
   remove entries from the map and `reverse` which is used to return a
   "reversed" copy of the map where keys are values and vice versa.
4. Fixes a bug in `Dictionary` class where `Erase` method removes wrong
   entry.