Added icon URLs and refactored the media concept.

Streams, surveys, and ohmlets may now have associated icon images. On creation, they will be passed as a part to the request called "icon" with a filename equal to the identifier for the icon; the definition will be passed as a part named "definition" without a filename. The definition part should be a {Schema | Survey | Ohmlet}.Builder that references te icon's identifier. The given unique identifier will not be persisted and is only used as a reference on object creation. When the object is created and the media file stored a new, universally unique identifier will be generated and used. This will be reflected in the object that is returned from the creation API call.

The media has been restructured to not be specific to media from survey responses. Instead, media is now a top-level object and is used to encompass media from both the survey responses, icons, and others.

Also, the error code for the authentication token grant API has been changed from 412 to 409 in the event that the user is trying to create an authentication token when they have not yet approved our app with the provider meaning we cannot validate their authorization tokens.

Closes #647
References #665