Account Management

---

**Dokku:** https://accountmanagement.dokku.hypothes.is

- [x] No tests for accountManagement directive
- [ ] No tests for backend changes
- [x] accountManagement directive needs to be moved to a controller
- [x] ~~Password updating doesn't seem to work~~ _(Fixed 2014-08-06)_
- [x] Account sheet needs to close on logout.
- [x] Nothing happens after a user account is disabled other than a success message.
- [x] Remove email update form (pending emails)
- [ ] Disable_user endpoint needs to return a 401 when the password is invalid
- [x] Clear out password fields on successful submission
- [ ] Use appropriate http error codes in update_profile responses.
- [ ] Return `"errors"` keys in error responses.

---

I'm taking the opportunity here to open this pull request for the account management branch so that both the code and the interface can be reviewed.

It's okay for this branch to still be considered a work in progress, and this PR will remain open as a place for discussion until it it's ready to be merged.

So this branch adds three new panels to the sidebar.

Settings:

![settings](https://cloud.githubusercontent.com/assets/47144/3386301/0f5f4056-fc73-11e3-87df-e6495c1e147b.png)

Profile:

![profile](https://cloud.githubusercontent.com/assets/47144/3386302/0f631910-fc73-11e3-9eac-a26a48f640ad.png)

Account:

![account](https://cloud.githubusercontent.com/assets/47144/3386300/0f5d2aa0-fc73-11e3-8d29-dae3f5a7f523.png)

@RawKStar77 if you've any thing to add, please do :)
Now that is a tricky request, we need some clarification
@tilgovi: I may need your help here

First, our [ajax_form()](https://github.com/hypothesis/h/blob/master/h/auth/local/views.py#L14) call filters out the errors field if the error is not an instance of ```colander.Invalid```, which is not easy to produce.

These kind of errors are produced by our form.validate calls, and we not really populate that errors field manually.
What's more, I've checked our code and Horus code, and copied their way of validation.
Some examples:
- Login: https://github.com/eventray/horus/blob/master/horus/views/__init__.py#L244
- Edit_profile: https://github.com/eventray/horus/blob/master/horus/views/__init__.py#L515

And I'm sure that this code is not working and possible never ran: https://github.com/hypothesis/h/blob/master/h/auth/local/views.py#L162

So I can set any error code and populate any field, but let's be consistent.