Refactoring

  - `RouterMixin` is splitted into `RoutingEnvironmentMixin` and
    `RoutingStateMixin`. Both these mixins are used by `Router`.

  - `RoutingEnvironmentMixin` is responsible for listening for changes in an
    active environment and provides method for accessing data from the
    environment and updating environment's navigation state.

    It expects the following methods to be implemented:

      - `getMatch()` which is used to get the `Match` objects from parent
        routers to construct path and prefix information for contextual routers

      - `onNavigation(path, navigation, cb)` callback which is called when
        changes in environment are occurred.

  - `RoutingStateMixin` is responsible for managing routing state transition but
    it is agnostic to the concrete shape of the state.

    It is implements:

      - `onNavigation(path, navigation, cb)` callback to react for changes in
        environment and trigger routing state update.

    It expects the following methods to be implemented:

      - `getMatch(state)` to extract match object from the state

      - `getRoutingState(path, navigation, props)` to construct state from a
        current navigation parameters.

  - `Router` component now implements:

      - `getRoutingState(path, navigation, props)` which stores just a single
        match object (to conform with `RoutingStateMixin`).

      - `getMatch(state)` which extracts that single match object the state (to
        conform with both `RoutingEnvironmentMixin` and `RoutingStateMixin`)

  - `Router` component now can operate in *controlled* and *uncontrolled* mode
    (similar to how React works with `<input />` components).

      - in uncontrolled mode it reacts to routing environment changes by
        triggering state transition.

      - in controlled mode (when `path` or `contextual` prop is provided) it
        expects owner to re-render router when routing environment changes are
        occurred. Router owner can pass `onPathChange` callback to be notified
        when this happens.

  - `RouteRenderingMixin` and `AsyncRouteRenderingMixin` mixins are removed, now
    `Router.render()` renders a handler directly.

  - `WaitForAsync` component which is used by `Router.render()` to render async
    components (it should be moved to react-async soon).

  - `makeHref(path)` is renamed to `getAbsolutePath(path)`.

  - `Match` object is in a separate module `./lib/Match.js`

  - `Match.getHandler()` renamed to `Match.createHandler()`