raise NoSuchPermission instead of returning it

Whoops...
Add docstring to PermissionsRegistry.register()
Add missing arg to recursive register() call
Add option to return Entry from PermissionsRegistry.register()

This is mainly intended for internal use (it will be used to
reimplement @permission using PermissionsRegistry).
Reimplement @permission using PermissionsRegistry

For consistency and to remove redundancy. From the outside (hopefully)
everything should look & work exactly as before.
Fix typo (missing word in exc str)
Fix another typo (missing words in exc str)