User pages

Adds the forgot password reset code and the change password and user info profile pages.
speaking of minimizing code in a ```try``` block: should the second two lines
```python
user.generate_reset_code()
info = user.info
```
go in an ```else``` clause here, since the exception being tested (and corresponding error message) correspond only to the instantiation of the ```User``` object?