Switch to using a Pigment type for color selections.

Pigments bind together a foreground, background, and background flag; Allowing
easier passing around of color information.

PigmentMapping provides a way to have a set of pigments with an optional set of
overrides for parts of the UI.

Each UI part is given an entry in the PigmentType enumeration which is used as a
key into PigmentMapping. Controls can use these to draw appropriately.

Also a reformat on Canvas, which slightly obscures the changes for pigments.
PigmentSession is introduced, which provides a simple way to introduce a colour
scope, any canvas operations done from within a PigmentSession will use the passed
pigments, then reverse back to the defaults.
Move Widget into the Controls folder/namespace

Change position to be publically readable.
Add a Pigments property giving the current pigments.
Move WidgetTemplate into it's own file.
A component is a container of events that can be raised on UI elements.

It can also have items scheduled to run after a delay. Or at least the nearest tick
to the delay.
Add several UI components.

The most important being Window which provides a container for other Controls.
A control inherits from a Widget and provides a base to write UI controls on.

A tooltip is a small UI element that can display information with support for transparency.
Lots of changes and a working UI framework ready to expand.

Further commits due to clean up the stuff not being used, in another feature branch.

This adds the basis of the framework for UI controls with the only working control right now,
a magical Button.

The API will be cleaned up soon, some of the interaction between the core and the ui assembly are
a bit hacky and need to be replaced with something cleaner. Like Config needing manual setup.

This also introduces an Application framework, which makes it simple to dispatch events around to
make everything work.