Add support for repopulated login form

a bunch of refactoring (why was everything in decorators.py? No reason for that!)
Added the ability to populate a login form so that we can show the appropriate template, populated the way we want.