Rewrite master sync tests to match our new desired functionality.  Start rewriting enginesync logic to match.
Fix last test
No more need to findNewMaster, remove it.
Fix sync deactivation.
Merge branch 'master_sync'
As a last resort, allow selection of non-playing decks as sync sources.
Fix test because sync-when-stopped behavior changed.
fix comment
Only match phase on seek if playing.
Make vinyl control and follower mode mutually exclusive.
When counting playing sync decks, check if they are not SYNC_NONE.
Check that playing deck has BPM > 0.0 before considering it in requestEnableSync.
Get rid of returns in requestSyncMode so that control flow is simpler.
notifySyncMode() calls should happen after the change takes place.
Comment word-smithing.
requestSyncMode() should always result in a notifySyncModeChanged() call to the Syncable. Confirm with InternalClock that their request was denied. This fixes toggle buttons in the skin flipping their state.
Handle a case that shouldn't technically happen.
Create Reverse Roll, much like beatloop rolls.
Puts a track into reverse while being held, resumes the track and disables slip when released.
Don't return the parent from parseStyle.

This risks creating a loop in the widget hierarchy if someone puts a <Style>
element in e.g. a <Children> block of a WidgetGroup. Instead, just make sure
that all calls to parseNode properly handle returning NULL.
Add XmlParse::selectElement.
Attempt to simplify our overly complicated skin construction process.

* Move all widget parenting and layout out of MixxxApp.
* Eliminate MixxxApp::m_pView. Instead, setCentralWidget on whatever is returned
  from the SkinLoader.
* Create the skin inner and outer widget holder explicitly in
  LegacySkinParser::parseNode instead of spreading it all over MixxxApp and
  LegacySkinParser.
* Clarify how parseBackground deals with the inner and outer widget.