Add a _MapWatcher

_MapWatcher will perform a shallow diff much like _ListWatcher to allow watches to work on a mapped object without producing max iterations by allowing a watcher to equate if the map has changed.

This fixes issue #146