Overall I love this branch, as you might expect.  One nit I've found here to pick: By not providing a means to opt out of the default render loop, I think we're limiting the user from things like placing multiple widgets on a page, adding custom updates into the render loop, etc.

I see that the user can override `widget.render`, but if they wanted their own app to be the master driver of all rendering, they wouldn't easily be able to stop the widgets from calling `requestAnimationFrame`.