Refactor and implement MapVisualizer class

Allows users to have default map drawing, but still override
functionality if they want to change how map and map objects are drawn
(e.g. if they want to extend list of map object types)