Add SkinContext, a class for tracking and evaluating skin nodes within a context.

* Remove WWidget::select* methods.
* Update all WWidget-style setup() methods to take a constant.
* Migrate all non-skin uses of WWidget::select* to use XmlParse::select*.
Add variable substitution support to SkinContext::select* methods.

* Support referring to variables by name (with optional format string) or by
  evaluating ECMAScript expression with a <Variable> node.
* Support setting variables with a <SetVariable> node.
* Add a test suite for SkinContext.
Use SkinContext instead of XmlParse in LegacySkinParser.
Make LegacySkinParser::parseNode return a list of widgets instead of a single widget.
Process standalone <SetVariable> nodes.
Allow embedding a <Variable> node within a <SetVariable> node.
Add <Template> support to skins.

* When a <Template> tag occurs, load the template from file and expand it.
* Cache the template file DOM to prevent repeated parsing of template files.
Merge branch 'master' into rubberstamp

Conflicts:
	src/skin/legacyskinparser.cpp
	src/waveform/renderers/waveformwidgetrenderer.cpp
Cut down on code duplication.
Replace more uses of XmlParse with SkinContext.
Some minor style fixes.
Comments.
Merge branch 'master' into rubberstamp
Disable rubberband scaling at high rates of speed.
This was causing lp:1256937
Create an enum system for seek requests to handle different cases.
Get rid of unnecessary cleverness with fallthrough switches
Add a default case, add brackets for case variable scope
Merge pull request #144 from ywwg/enginebuffer-seek-rewrite

Create an enum system for seek requests to handle different cases.
Merge pull request #140 from rryan/rubberstamp

Skin templating system.
Only load pressed/unpressed pixmaps if the node is present.