Add set-phase-on-sync-enable.  Fails because internal buffer is always marching forward
Try to sync phase when enabling sync follower
Sync phase in more situations.
Make programatically-triggered phase syncing happen inside enginebuffer to prevent off-by-one-buffer misalignment.
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 set-phase-on-sync-enable.  Fails because internal buffer is always marching forward
Try to sync phase when enabling sync follower
Sync phase in more situations.
Make programatically-triggered phase syncing happen inside enginebuffer to prevent off-by-one-buffer misalignment.
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.
Address notes
Replace more uses of XmlParse with SkinContext.
Some minor style fixes.