Simpler and more powerful decorator

See #48 for all the gory details.
Mentioning this here for completeness sake, but I've mentioned similarish things in other comments. This says that the default is `None`, but no where does it say what `None` means as a key and I'm pretty sure the function fails if this is `None`.