Fix issues with deleting comments on replies.

We've had some long-standing issues deleting comments on replies.
Deleting comments using the reviews/<id>/replies</id>/*-comments/ URLs
was supposed to work, but we didn't have any tests covering this and
never noticed we didn't have proper has_delete_permissions functions for
these resources.

The has_delete_permissions functions for comment classe have moved from
the subclasses into the base classes. This will ensure that any subclass
that enables deletion will do the right thing.

While writing tests for this, I also found that our diff comment
querying behaved differently from screenshots and file attachments. They
were only accessible for public comments or when the requester owned
them. This was unnecessary, and we really wanted to return Forbidden in
this case. Diff comments have been updated in this case to match what
the other comments do.
Add Depends On and Blocks fields to review requests.

This feature adds the ability to link requests together by means of two
fields; depends on, and blocks. These relationships are interconnected
in the sense that, if Request A depends on Request B, then inversely
Request B's blocks field will display a link back to Request A.

This adds the ability to add, edit, and remove dependencies from both
the backend admin panel as well as in the front-end.

Blocking relationships are built as a reverse of dependency, and thus
are automatically generated upon a dependency change.

Fixes bug #281
Reviewed at http://reviews.reviewboard.org/r/3881/
Tighten up some of the interdiff file mapping logic.

We have a long-standing bug where, sometimes, an interdiff will have
problems when there's a file changed in one revision of a diff and then
reverted in another. While it's supposed to show that file as reverted,
this didn't always happen.

We determine that a file should be shown as reverted if we store the
force_interdiff flag for that file (which is based on there being an
interdiffset object). We seem to do that pretty reliably, yet it
sometimes screws up anyway.

The only thing I can think of is that we were comparing against None
incorrectly. Perhaps in some weird corner case, the comparison was
providing the incorrect result. Now, we use "is not" instead of "!=" for
this comparison.

I've also changed the logic to use generators where possible. Should
be more efficient (though barely).
Update our "Use post-review" to "Use RBTools."

This updates the text and link to point to RBTools, and rewords the text
a bit.
Add support for self-hosted hosting services.

Now, hosting services an be marked as "self-hosted," which will cause a
"Domain" field to show up for the service above the account entry. Many
of the functions now take a domain.

Accounts now take a domain as well, and we filter registered accounts by
the domain.

Bug trackers have the same sort of setup as well.

GitHub's had a few more changes added to it for cleanup to use the
hosting URL and to not duplicate so much code.

Unit tests were added for all of this.
Disable commenting when there's a pending draft of a review request.

A common mistake is to put up a new diff or file attachment and then try
to comment on it before publishing the draft. This doesn't work, and
will fail on an API level, but we didn't tell the user at any point that
they should expect problems doing that.

Now, the dialog will tell the user they must publish before they can
comment on the diff or file. All the fields will be disabled.

Note that bug #831 requests that we *allow* commenting. That's a much
bigger problem to solve, and one we won't be solving as part of this
change. This just fixes the unexpected failure case.