support hashchange event

I needed to code window.location almost from scratch to work with hashchange events.
Tests work fine now.

refer: tmpvar/jsdom#433