automatically request a relayout when visibility changes

Layouts will typcially take into account the visibility of a widget.
This adds a static observer to automatically request a relayout when the
visibility of a constraint widget changes.
add a visible_widgets method to Container

This makes is simple to get the list of visible constraint widget
children of a container. The default container layout is updated to only
include visible widgets.
add configurable row and column spacing to the Form

This updates the Form layout to allow for user-defined row and column
spacing. It also fixes the layout to properly handle invisible child
widgets.
Add an example of controlling form spacing