[WIP] I at overhaul MK II

This implements BevapDin's suggestion of a wrapper class that allows callers to modify items on the map easily without exposing direct access to the underlying container.
The result of `erase` is ignored. You might need two separate loops here, one for `remove_items` being true and one for it being false or iterate backwards. The previous code iterated in reverse, so removing the item didn't matter on the subsequent iterations, here however, the item after the removed item is skipped.