Switch back to using a decorator.

There is no need to use a custom authentication backend to display a validation error message. A ValidationError can be thrown out of the decorated authenticate method as well.

Allow clients to specify how the username should be extracted from the authenticate kwargs.