WIP: Canvas visual transforms

This PR adds transforms to the base Canvas class, which will be necessary to ensure many visuals are able to render correctly. This is a major API change open for discussion--it assigns the task of managing glViewport and FBOs to the canvas. Aalthough it is still possible to do these manually, many visuals could fail to render correctly if the transforms are not properly configured. 

I have also updated much of the scenegraph to make use of these features, which removes some code from the scenegraph event system. New examples to try out: `scene/viewbox1.py` and `scene/grid.py`. (and `scene/viewbox.py` is broken, but could be resurrected with minor changes) 

To do before merge:
* FBOs still need some transform corrections
* More code cleanup in ViewBox and events
* Update visuals to make use of canvas.fb_transform and ndc_transform