Make widgets_macro feature be about sub-widgets.
Require a widget to always be passed a root node.
Define Document apart from Widget.
Move shared method to WidgetContainer.