Cleaner steps for register, unregister, getRegistration

* Less verbose, no need to refer to resolver.
* Use DOMException, not DOMError.
* It's not ok to reject a promise without arguments, always provide a DOMException.
* Resolve unregister promise with PushRegistration.

For more background details see the Promises Guide:
https://github.com/w3ctag/promises-guide

This fixes issue #4.
I'm not a fan of the duplication this has with the steps for retrieving the current registration. Is there precedence for phrasing this like: "Run the steps defined in the [retrieve registration] algorithm, and resolve |promise| with the returned promise."?