anchor.diff:     * window, such as [listen].
      */
     Future<bool> route(String path, {Route startingFrom}) {
  +    var future = _route(path, startingFrom: startingFrom);
  +    _onRouteStart.add(new RouteStartEvent._new(path, future));
  +    return future;
  +  }
  +
  +  Future<bool> _route(String path, {Route startingFrom}) {
       var baseRoute = startingFrom == null ? this.root : _dehandle(startingFrom);
       _logger.finest('route $path $baseRoute');
       Route matchedRoute;
  
positive.code:         base._currentRoute = newRoute;
          base._currentRoute._lastEvent = event;
          newRoute._onRouteController.add(event);
          return route(match.tail, startingFrom: newRoute);
        }
        return false;
      });
  
negative.code:   RouteEvent _clone() => new RouteEvent(path, parameters, route);
  }
  
  /**
   * Event emitted when routing starts.
   */
  class RouteStartEvent {
  
    /**
     * URI that was passed to [Router.route].
     */
    final String uri;
  
    /**
     * Future that completes to a boolean value of whether the routing was
     * successful.
     */
    final Future<bool> completed;
  
    RouteStartEvent._new(this.uri, this.completed);
  }
  
  abstract class Routable {
    void configureRoute(Route router);
  }
  