Implement authentication

Provides a way to authenticate users as well as a login form and a user creation form