Extension:GuidedTour/Refactoring brainstorming

Goals

 * Easy for extension developers to use
 * Easy for admins to use
 * Easy to maintain and enhance
 * Clear and concise, without unused code or features
 * Allow tours to run setup code every time the tour is re-started (passing some setup callback to defineTour)? Currently, they can only run at page load, which for VE can make a difference in some edge cases.  This could become more of an issue as no-reload interfaces become more common.  See https://gerrit.wikimedia.org/r/#/c/72682/7/resources/tours/gettingstartedtasktoolbarve.js
 * Point to correct selectors when VE is enabled (e.g. they appropriate ca-edit, and wikitext becomes ca-editsource). There could potentially be a mini-library of selectors GuidedTour helps you with (you could still use arbitrary ones when needed) .Done right, this could potentially handle both VE and skin-specific variations for standard features
 * shouldSkip array so they can easily combine (OR/AND)
 * Names for steps so they can point to each other, with possible special 'next' and 'end'
 * Add non-linear?
 * Right now GuidedTour handles hooks, and shouldSkip uses simple boolean functions
 * Cut out the middle man and let tour writers use hooks directly? .listenFor could take a list of hooks, any of which firing triggers a call to proceedTo.  proceedTo would pass the hook that just fired, if any.
 * Let tours seamlessly point to each other? This ties well to the non-linear.  For example, a tour could send people off to another tour in some cases.
 * With non-linearity and more powerful options, nesting may get too deep currently.
 * Take more of a DSL approach
 * var otherStep = tour.step( ... )
 * startWith( step ), proceedTo (takes a function and returns the next step)
 * then with implicit next button?
 * .next implicitly chains together with next buttons (necessary?)
 * then/proceedTo passes in an object that you call for the "shouldSkip" helpers (maybe the tour object). If proceedTo/then doesn't return anything/returning undefined, it doesn't skip.
 * Global transitions if the user does something not covered by local transition (click "Edit source" in the middle of a VE tour)
 * Allow functions instead of strings in some cases
 * Do a test branch of GuidedTour for this new interface. This should include reimplementing test.js.  Also, use this test branch in a test branch of GettingStarted, to reimplement gettingstartedtasktoolbarve.


 * Pass tourState to then/step/proceedTo functions.
 * Have tour cookie track which steps have been shown? Currently it acts as a high-water mark, which won't work as well for non-linear tours. (Instead you could launch separate tours for each sub-subject, each maintaining its own current step.)