Vision:
* there's an infinite 2D surface to place definitions on, pan around,
zoom in and out
* there's a hierarchical box model for rectangles containing text and
graphics that get rendered on the 2D surface, moving things around
as needed to avoid overlap.
This commit adds the 2D surface with panning.