anchor.diff:  
     RoutePreEnterEvent(path, parameters, route)  : super(path, parameters, route);
   
  +  RoutePreEnterEvent._fromMatch(_Match m)
  +      : this(m.urlMatch.tail, m.urlMatch.parameters, m.route);
  +
     /**
      * Can be called on enter with the future which will complete with a boolean
      * value allowing (true) or disallowing (false) the current navigation.
  
positive.code:     return _leaveOldRoutes(startingFrom, treePath).then((bool allowed) {
        if (allowed) {
          var base = startingFrom;
          var tail;
          treePath.forEach((_Match matchedRoute) {
            tail = matchedRoute.urlMatch.tail;
            var event = new RouteEnterEvent(matchedRoute.urlMatch.match,
                matchedRoute.urlMatch.parameters, matchedRoute.route);
            _unsetAllCurrentRoutes(base);
            base._currentRoute = matchedRoute.route;
            base._currentRoute._lastEvent = event;
  
negative.code: class RouteEnterEvent extends RouteEvent {
  
    RouteEnterEvent(path, parameters, route)  : super(path, parameters, route);
  
    RouteEnterEvent._fromMatch(_Match m)
        : this(m.urlMatch.match, m.urlMatch.parameters, m.route);
  }
  
  class RouteLeaveEvent extends RouteEvent {
  