Use the GitHub API to determine repository validity.

We were previously attempting to access GitHub repositories directly
through Git, which required a valid SSH key configured. This led to
some problems.

1. It required that the user properly create and associate an SSH key.
   While annoying, this was actually made worse by the "Associate SSH
   key" checkbox, which associated as a deploy key. Deploy keys could
   only be used for one repository at a time, and this caused massive
   confusion.

2. It meant that we only knew that a repository could be accessed by
   that key, but we didn't know if anything else was invalid.

3. It was a problem in networks that didn't allow SSH access to the
   outside world.

4. When validation failed, we didn't know much, and the resulting error
   was hard to figure out.

Now, the GitHub API is used to validate repositories. We can tell the
user that the repository wasn't found, and list possible reasons why. We
can also make sure that there isn't a mismatch between the selected plan
and the public/private setting of the repository.
Use the GitHub API to determine repository validity.

We were previously attempting to access GitHub repositories directly
through Git, which required a valid SSH key configured. This led to
some problems.

1. It required that the user properly create and associate an SSH key.
   While annoying, this was actually made worse by the "Associate SSH
   key" checkbox, which associated as a deploy key. Deploy keys could
   only be used for one repository at a time, and this caused massive
   confusion.

2. It meant that we only knew that a repository could be accessed by
   that key, but we didn't know if anything else was invalid.

3. It was a problem in networks that didn't allow SSH access to the
   outside world.

4. When validation failed, we didn't know much, and the resulting error
   was hard to figure out.

Now, the GitHub API is used to validate repositories. We can tell the
user that the repository wasn't found, and list possible reasons why. We
can also make sure that there isn't a mismatch between the selected plan
and the public/private setting of the repository.
Merge branch 'release-1.7.x'
Improve move detection in several scenarios.

Move detection's abilities were pretty limited, and there were many
cases where it simply didn't even work. This change addresses several
cases:

1) Blank lines in a move region. Any blank lines (or whitespace-only
   lines) would interrupt the move region, causing new ones to form
   (assuming those individually were considered valid, useful move
   regions). Now blank lines will be folded into the existing region,
   if they bridge two regions.

2) Adjacent but different move regions didn't work. Only the first
   would win. There would need to be at least one line between regions.
   Now any regions anywhere work, in any order.

3) Only insert/delete lines were considered for moves, which was a
   problem when moving some functions that resulted in replace lines
   (such as when one function was replaced by another). Now replace
   lines are factored in. The left-hand side is treated as a delete,
   and the right-hand side is treated as an insert.

4) The new move flag display assumed consecutive lines constituted the
   same move region, even if that wasn't true. It now shows a new
   beginning move flag for a region if it's a different region from
   the previous line.

There's also some improvements to the display of the move flags. Move
flags on replace lines caused some padding issues with line numbers that
broke alignment, so that's been fixed.

Along with this, 2 move flags on a replace line is a bit weird and
broken-looking typically, so in an effort to get a step closer to
something good, arrows are now shown pointing to the section moved,
padding has been added between the flag and the text contents, and
"line" has been added to the text.
Improve diff pagination a little bit.

This doesn't change pagination in a wild way, it just fixes it to not be super
weird. During the diff index changes, the pagination links at the top of the
diffs disappeared, leaving it so the only one was at the bottom. This was a
rude surprise when I slogged through a big review only to discover that there
were two or three more pages! I've restored the pagination links at the top,
which means there's one set of links after the diff index and one at the very
bottom of the page.

I also changed it so switching pages will operate without a reload. This makes
it very smooth to navigate around.

Testing done:
Switched around to a bunch of different revisions and interdiff revisions with
multiple pages. Made sure that switching pages always went to the right place,
and that switching to new revisions always loaded the first page of the
new revision.

Reviewed at https://reviews.reviewboard.org/r/4856/