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.
What is the benefit of passing an AbortError if there's only one possible path leading to rejection ("an error")? How would the developer use this information? Do you envision additional rejection paths in the future?

Of course, this would be fine if it matches what other Promise-using specifications do.