first pass at supporting query params in the hash Fixes #5085

This commit strips any query string from the hash when referencing an internal
page. This allows users to reference exising pages but communicate information
to parts of their application and allows users to use a singple page to do
different things with the page event bindings to do so.

The information about the url is preserved under the data.options object provided
to the page lifecycle events as data.options.target which will contain the original url.
create, store, and pass the absolute url in all page lifecycle events on the trigger data object
use existing api property name for consistency
fix for pagechange value and test of 3 page change events
basic event normalization
clean up the navigate special event
quick mutex cleanup
tests for navigate event
setup tests to handle both support cases
namespace popstate and hashchange bindings
move event to events/navigate in preparation for back and forward
note on deps
split out path for future direct reference
abstract path helpers
allow users to provide state to further normalize the navigation events
use originalEvent in preference to from
remove old TODOs
include the navigate method to do history tracking and state inclusion for hashchange
tests for navigate event state should work with both popstate and hashchange

This commit deserves some explanation, particularly the popstate binding
that was added. It appears at least in initial testing with Chrome, that
changing the hash _stops_ execution of the current stackframe and proceeds
to trigger a popstate event. As a result that popstate event needs to be
swallowed until we can make the replaceState modifications to the url.

In short we're keeping the even structure serialized so that the behavior
is easy to deal with. A bit of further work might store the originalEvent
for use with the synthetic version of popstate that's triggered.
todos and push state glob catch