HTML4: handle escaped/unescape versions of URLs consistently
HTML4: handle escaped/unescape versions of URLs consistently

When comparing hashes in HTML4 browsers, always compare fully
escaped versions of the hash (via encodeURIComponent).

In cases where an escaped URL was being pushed, HTML4 browsers would
fail to trigger a statechange event because a completely escaped URL
would fail to compare properly to a partially escaped URL.  That would
lead to a second pushState() of the same URL, leading to a no-op.

https://github.com/balupton/history.js/pull/108#issuecomment-3443739

suryasingh/history.js,asakurasol/history.js,parksangkil/history.js,mcanthony/history.js,asakurasol/history.js,nagyistoce/history.js,abejfehr/history.js,suryasingh/history.js,browserstate/history.js,mcavaliere/history.js,m4h4n/history.js,browserstate/history.js,webhacking/history.js,parksangkil/history.js,Renji/history.js,kadirroi/history.js,webhacking/history.js,kadirroi/history.js,balupton/history.js,suryasingh/history.js,chengky/history.js,Gimcrack/history.js,chengky/history.js,fashionsun/history.js,m4h4n/history.js,abejfehr/history.js,mcanthony/history.js,niaoren/history.js,niaoren/history.js,balupton/history.js,browserstate/history.js,webhacking/history.js,nagyistoce/history.js,candybanana/history.js,m4h4n/history.js,parksangkil/history.js,CBXZero/history.js,mcavaliere/history.js,Renji/history.js,mcavaliere/history.js,Gimcrack/history.js,rajatraj733/history.js,candybanana/history.js,rajatraj733/history.js,Gimcrack/history.js,rajatraj733/history.js,CBXZero/history.js,chengky/history.js,abejfehr/history.js,CBXZero/history.js,fashionsun/history.js,nagyistoce/history.js,kadirroi/history.js,Renji/history.js,candybanana/history.js,fashionsun/history.js,niaoren/history.js,mcanthony/history.js,asakurasol/history.js