A ton of additional refactoring, removing usage of the main Output and CanvasOutput objects. Moved a bunch of JS-specific logic into CanvasOutput.