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.

For more background details see the Promises Guide:
https://github.com/w3ctag/promises-guide
I know, and that's why I'm fine with either of these approaches:
1. The spec says to use a DOMException. The implementation can then use different types as needed e.g. NetworkError or NotReadableError. I think there is value in permitting an implementation to use informative errors this way.
2. The spec says to use the most appropriate known error. I'd suggest using AbortError. The implementation has no choice of error type, but can still provide more specific information to the author using the message attribute. This is not to be coded against (though this will inevitably happen).