Refactor CanvasGraphics and MapManager to further generify Canvas

Previously, CanvasGraphics implementations had to manage everything
specific to the canvas implementation themselves, including things they
shouldn't have to worry about like showing the canvas to applicable
players.

Because CanvasGraphics' implementations of drawing functions are likely
to be similar (or exactly the same), CanvasGraphics was turned into a
concrete class, with the width/height getters and setPixel method moving
to the newly-formed CanvasBackend. CanvasBackend contains most of the
methods previously contained in CanvasGraphics (with a couple extra),
and now supports being added to multiple Canvases.

MapManager was refactored and generified into CanvasManager, with some
functionality as necessary to CanvasBackend.

Broken as of this change: interact/hover