Add rendering of binary file attachments in the diff viewer.

This introduces the ability to associate a FileAttachment with a files
in a repository. The diff viewer can make use of this to render
thumbnails for binary files.

There's no way yet of associating a file outside of modifying the
database. Later, there will be API and UI for this.

This work is based on Tina Yang's work, with some fixes and a change in
the association model. Previously, FileAttachments were associated with
FileDiffs solely. Now, they're associated with FileDiffs only for newly
introduced files (which don't have a revision yet), and otherwise
associated with a tuple of (repository, file path, revision). This helps
reduce duplicates, meaning that if we fetch a binary file for a path +
revision, we'll have that file for future diffs.

The actions in the diff viewer for Download and Review are temporary. I
have some other thoughts for the interface, but they won't be done in
this change.