User Interface: Created Button class.
User Interface: Added a `tag` field to buttons.

The tag is passed on to listeners when their callback is called.
This allows multiple buttons to use the same callback, but have it
so that their respective calls are differentiable.
User Interface: Button constructor now takes dictionary

There were too many properties to not label them, now a Button must
be constructed like so:

    new Button do
      name: \name
      tag: 0
      size: 20

Also fixed the slight offset the typesetting added to the label that
made it appear to sit slightly lower than central.

Now that parameters come from a dictionary, must change `enabled` to
`@enabled` as the former is no longer available.
User Interface: Button now decides size by width, not font size.

This makes mking all the buttons the same size *a lot* easier.

Additionally, added the `leading` property to PointText. This deals
with the offset from center problem.
User Interface: Made Button#highlight, Button#reset public.

They are needed to implement toggle buttons.

Additionally, added the ability to trigger a button without notifying
(For the usecase where the listener is themselves triggering the
button from the callback function).
User Interface: Adding Buttons to App

Added the `Add Node` and Mode Toggling Buttons plus the stub functions
for their callbacks.
User Interface: BUG FIX

Renaming DEFAULT_BTN -> BTN_DEFAULT
User Interface: Adding UI Layer

Added an extra layer to the Window, the UI Layer, for UI chrome to
reside in.

Modified the code in the App class to put buttons etc into the UI
Layer.

Found a bug: the previous insert-children methods were not working
because they were supplying the item to be inserted as the index
(and that was failing silently) Fixed now by removing uses of
varargs, and instead supplying lists.
User Interface: Buttons take a highlight colour.

Buttons now take an optional highlight colour upon initialisation.

Also modified Button#set-listener to take a function, instead of an
object and a key for a field therein.
User Interface: Using a Splat instead of an explicit concat.
User Interface: PrefixTree + Tests

Prefix Tree implementation with ability to filter by prefix, and
iterate through elements, in alphabetic order.
User Interface: Prefix Tree now also supplies keys in iterator.

Additionally, changed `filter-str` to `init-str` as I thought that
was a more appropriate name.
User Interface: PrefixTree Documentation.
User Interface: Moving colours into their own file.

This should help with consistency across the app.
User Interface: Updated PaperJS and that changed the behaviour of 'leading'.

Now the `leading` propery of text is set to half their font size to
make their vertical alignment central.
User Interface: Preliminaries for FilterList

Started work on FilterList class:
 *  FilterList now displays rows of data from its datasource.
 *  ... can be made to appear and disappear

Created a (private) RowFactory class, which is used by the FilterList
as a pool of Row views to display.

Created a (private) SimpleRow class to represent the standard Row view
for the FilterList.

Additional Changes:
 * PointText:
   - Font size needs a string, not a number
 * Now using the 'px' suffix on numerical values that are being used
   as pixel quantities.
 * For FilterLists, `list.set-data` must occur *after* the list has
   been laid out (the first call to `list.expand`), otherwise the
   additional row views mess the layout up.
 * When specifying groups `clipped: true` must occur after the
   children have been specified, otherwise the clipping does not
   occur.
 * PrefixTree keys *must* be provided all lowercase characters
   ([a..z]*) As that is the range that the iterator checks.
   (This should probably be fixed in the future).
User Interface: Fixing Button Font size.

Button font size is now actually set (See previous commit message
about the PointText size having to be a string).
User Interface: FilterList Row now highlights on mouseover.
User Interface: Rows can now be selected.

Selected rows are highlighted green, and then send their data to the
`on-select` callback, which is set using `set-listener`.

Also changed behaviour such that if the mode is changed, then the
Node list is hidden.
User Interface: Updating the documentation to reflect changes to code.