Refactor navigation event handling.

*   Introduce new events and request callbacks to more consistently provide
    parity between the two.
*   Use dedicated functions to dispatch events and callbacks to ensure the
    custom event detail objects and callback arguments are identical.
*   Add events for handling clicks and history changes, allowing them to be
    canceled to prevent navigation.
*   Deprecate the old events and callbacks.
*   Update the demo app to use the new events.

Progress on #12.
That `@return` annotation was wrong; it should have read false.  A `true` value does indeed mean "proceed" in that the event was _not_ canceled.  A `false` value means the event was canceled.

For clarity, I've renamed `proceed` to `canceled` and inverted the related boolean checks.  (The type signatures and return values of the dispatch functions are not changed though.)