Fix DifFParser preamble parsing with weird unicode.

One of the old review requests on r.rb.o has a diff file which is basically
utf-8 encoded garbage. This was causing an exception because we were trying to
concatenate strings and bytes together, which caused it to try to decode the
utf-8 text as if it were ascii. Adding some 'b' prefixes to our strings keeps
things in the bytes realm.

Testing done:
Looked at the /diff/raw/ page for both the broken review request, as well as a
couple ones that had valid diffs.
Encode markdown html text to utf-8 before passing into minidom.

minidom doesn't seem to like unicode objects (and tries to decode them as if
they were ascii). The trivial fix is to encode to utf-8 before calling
parseString.

Testing done:
Looked at /r/2568/ from r.rb.o, which previously caused a traceback. Saw that
both the description and the change description field correctly rendered the
unicode text.
Return an error when trying to POST a diff on a review request with no repository

The diff-list API didn't check that the associated ReviewRequest had a
repository before it started trying to parse things and validate the uploaded
data. This meant that trying to add a diff (likely via rbtools) to an
attachments-only review request would cause an exception on the server.

I've added a test for this, and fixed the bug. While I was trying to decide on
the right WebAPIError to use, I noticed an ugly misalignment in errors.py, so
I've fixed that too.

Testing done: Ran unit tests.

Fixes bug 3258.

Reviewed at https://reviews.reviewboard.org/r/5522/
Fix order of checks in git diff parsing.

One of our old review requests was causing an exception where it was indexing
past the end of the diff. The issue here is that we added code to check for
new file/moved file/mode change state, but that code was added above the index
check instead of below it.

Testing done:
Loaded the review request that was causing the error. Before this change, it
caused an exception. After, it loads fine.

Reviewed at https://reviews.reviewboard.org/r/5523/
Fix unicode handling in git diff parsing.

We still had some lingering type problems distinguishing between unicode and
bytes in parsing git diffs. This meant that diffs that including utf-8
characters would cause UnicodeDecodeErrors when type coercion tried to
interpret utf-8 encoded text as ascii. One example of this is the diff attached
to /r/3749/.

This change makes sure that during the diff parse, we're always treating the
text as bytes. While this is theoretically bad for non-utf8 encodings, it's no
worse than we've always had, and makes it so we can actually parse these diffs.

Testing done:
Loaded /r/3749/. Saw the page instead of a traceback. Verified that the raw
diff returned the right utf-8 encoded patch.

Reviewed at https://reviews.reviewboard.org/r/5524/
Fix changedesc captions field for screenshot objects.

The new captions code for changedescs was trying to access a 'filename'
property on Screenshot objects, but they didn't define such a property. This
change adds it.

Testing done:
Viewed /r/822/ from r.rb.o and saw a usable page with a change description that
included the caption, rather than a traceback.

Reviewed at https://reviews.reviewboard.org/r/5525/
Tweak the account forms a bit.

The forms on "My Account" had a few issues. The first one I noticed was that
the label for "Keep this information private" ended with a colon, despite the
check-box being on the left side of the label. This was because we were using
django's label_tag method, which is kind of dumb and expects the form field to
always be on the right-hand side of the label. I've switched us over to using
djblets' label_tag tag, which does the right thing for check-boxes. As a nice
side-effect, we automatically get better styling for required field labels.

The other thing I noticed was some issues with alignment and sizing. The labels
were all indented 0.5em from the left-hand side of the boxes that they labeled,
which looked ugly. The e-mail field also had a different font size than the
other fields.

Testing done:
Looked at the various forms in "My Account" and saw that they all looked nice.

Reviewed at https://reviews.reviewboard.org/r/5526/
Show the username instead of first name in the top navbar.

This mirrors the usability change we made for RBCommons a little while
ago. People know their first name, but sometimes forget the assigned
username. Instead of showing the first name in the top navbar next to
the gravatar, we now show the username instead. This particularly helps
if a first name is not set.