Simpler and more powerful decorator

See #48 for all the gory details.
It actually takes None which is the default, too. What happens if it's None?