Refactor and add non-linear tours, with tests

* Use a more object-oriented approach with Tour. TourBuilder, Step, and
  StepBuilder objects.  Deprecate gt.defineTour.
* Allow steps to listen to mw.hooks with integration so these events
  are registered and unregistered at the right time.
* The tour calls StepBuilder.next to specify which step is next,
  or a function which returns the next step dynamically.
* guiders.prev() has been removed.  It was never exposed as a standard
  GuidedTour button.  As a consequence, it did not fully work even when
  used manually (e.g. next->prev->next->prev failed).
* When an event that GuidedTour is listening for occurs, the step's
  skip callback (provided by calling StepBuilder.skip) is called, and
  the return value (if any) specifies which step to go to next.  As
  part of this, move skip functionality completely out of
  mediawiki.libs.guiders, and mark auto-advance (advance_) methods
  deprecated.
* Steps have names (more memorable, can optionally be used in the
  builder for transitions, and will facilitate possible future
  features, such as jumping from one tour to another)
* Remove most logging code; will be re-added using new schemas in next
  commit.  Use mw.log.deprecate to show warning if (already-deprecated)
  gt.recordStats is used

The tours are not being changed in this commit, in order to test
backwards-compatibility.  The ones in this repository will be updated
in a commit chaining off this one.

Bug: 48507
Bug: 53143
Change-Id: I3ab058429bd65ce6bc1368350b0609cca991965d