Add support for repopulated login form

Added ability to populate an authentication-form, so that we can show the appropriate error messages.
Also, refactored a load of stuff, since there's no reason that decorators.py contains anything other than the actual decorator we need.