Refactored login code, storing user data in session, better errors

Put login in a waterfall, now storing user information upon login (see #8), better error handling.
The message is for us, what reaches the client is what you return in `serialise` which is 
```
{
  context: "authentication"
}
```