Server side authentication works!

Preliminary PR. Please comment heavily, as I don't think it's ready for merge quite yet.

I had to move around some functions to fix the circular imports.
Also, modified authentication decorator to account for permissions.
Finally, updated tests to reflect the changes.

NOTE: I had to do add in some dummy testing code into the `requires_authenticated_user` function as I'm not sure of the best way of doing this. Perhaps @moowiz could help out? :)

Fixes #47 
Not sure we care now, but I think we should be creating users on the fly. If some random person with a Google account wants to start submitting assignments, they should be able to do so. Let's not make any architecture decisions that prevent us from allowing this in the future.