Replace user profile gravatar with uploadable avatars

An avatar is simply an image attachment to a user profile. In order to upload avatars, API resource classes for handling files and attachments have been created.

To link to avatars correctly in templates, the URL is built from RequestContext (for the current domain) and the file path. In future this should be moved to a template tag or otherwise simplified.

Multiple image attachments to a single profile are permitted, though there is no interface (yet) to choose which image to use as an avatar.

All references to gravatars have been removed, which has simplified the API calls needed to update a profile (previously the associated user object needed to be fetched to populate the "gravatar email" field.

Refactoring has been done on API resource methods to make them more referentially transparent and offload some input validation to the caller (for greater clarity).

Changes have been tested against the integration suite.