Allow changing of language preference from profile page

This adds profile API functions for handling the fetching and updating of user preferences, a language selection form to the profile page, new JS to process the form's submission, and modifies the profile views to handle this new functionality. Also includes a handful of small tweaks to make things more consistent.

@wedaly and @dianakhuang, could you review this?
This is a little strange, because if the user doesn't have a preference, you're passing `None` into `preferred_language()` then relying on the `if/else` block to return the default language.  If this is the expected behavior for `preferred_language()` (which seems reasonable), then we should add something about that to the docstring.