Allow widgets to belong to different groups.

This required refactoring the attributes made visible in the base Widget
class.  There are now getters (and sometimes setters) in addition to
properties.  Furthermore, the properties use the getters (and setter) in
a way that allows the getters to be overwritten in subclasses.
Add a UI pack from OpenGameArt.org
Work in progress: Get the viewport to scroll.
Fix several small architectural issues.

This commit makes three noteworthy architectural changes, all to
facilitate writing the viewport widget.

1. Make claim() recursive.  This makes claim() more robust and easier to
   understand, although it does mean that claim () will get called more
   than strictly necessary during repacking.

2. Change how children are attached to parents.  In particular, widget
   used to be notified when attached to a parent.  They are now notified
   when attached to a root.  This is more useful, because it gives
   widgets a chance to react once a batch is available.

3. Handle all types of mouse events within a viewport.

A number of small bug fixes are also included.