Fix broken/missing docs and behavior for the new validation API.

The new validation API was missing documentation. While adding it, I
noticed a few problems with how the API was being represented.

The resource name "diffs" collided with the other "diffs" resource, and
overwrote the URI template in the root resource. Resource names should
be unique, and more specific, so I renamed this to "diff_validation." I
also got rid of the mimetype, letting it build upon the new name (and
fixing some oddity with the resource not properly encoding in XML, for
some reason).

I also noticed any client following the link from /validation/ to
/validation/diffs/ would get an error, since there's no GET handler. A
proper REST resource should provide some representation. So, we provide
a payload containing the typical links for getting/posting to the
resource.

I also fixed up some documentation issues, some doc generation
issues with singletons, and added the pages for the validation resource.

Note that this does change the payload key for the diff validation
response.
Move diff expand/collapse support into the new DiffReviewableView.

The resulting code is actually cleaner than the old code, because we
have more context to work from, instead of having to embed a bunch of
stuff inside the links.

There's now unit tests that ensure our expand/collapse logic works
correctly.

It also fixes a regression in collapsing that was introduced in the
original DiffReviewable model that was pulled out early on in the
JavaScript refactoring.

This is the last work needed before we can move the DiffComment
support over.
Provide ReviewRequests and Reviews to reviewables and comment blocks.

Reviewables and CommentBlocks now take 'reviewRequest' and 'review'
attributes, instead of having to call out to gReviewRequest.

The 'reviewRequest' attribute is required, but 'review' is not. If not
provided, AbstractReviewable will get/create a draft Review object from
the ReviewRequest. These two parameters are now required.

Reviewables also now have a convenience function for creating
CommentBlock and adding them. This will do the work of passing along the
ReviewRequest and Review to the CommentBlock instance.

Existing Reviewables and CommentBlocks have been updated to work with
these changes. External ones will need to be changed.
Add a $.fn.bindClass function for mapping an attribute to a class.

bindClass is used when you want to toggle whether a class is on an
element based on the value of a boolean attribute. It adds or removes
the class initially based on the attribute at the time of binding, and
responds to all updates to the property.

Like the other binding functions, it also supports an 'inverse' option
for flipping when the class will be present.
Update DiffCommentBlock to be an AbstractCommentBlock in DiffReviewable.

DiffCommentBlock is now based on the AbstractCommentBlock{View}, which
allows us to eliminate the majority of the code and take advantage of
all the niceties that the Reviewable infrastructure gives us.

Some of the AbstractCommentBlockView code had to be made more flexible
with regard to positioning of tooltips and update bubbles, but otherwise
it's basically unmodified.

This also ends up fixing a long-standing bug where a comment in an
expanded region would not show up again if the chunk is collapsed and
then re-expanded.

Most of the code from diffviewer.js is now gone with this change.
Update DiffCommentBlock to be an AbstractCommentBlock in DiffReviewable.

DiffCommentBlock is now based on the AbstractCommentBlock{View}, which
allows us to eliminate the majority of the code and take advantage of
all the niceties that the Reviewable infrastructure gives us.

Some of the AbstractCommentBlockView code had to be made more flexible
with regard to positioning of tooltips and update bubbles, but otherwise
it's basically unmodified.

This also ends up fixing a long-standing bug where a comment in an
expanded region would not show up again if the chunk is collapsed and
then re-expanded.

Most of the code from diffviewer.js is now gone with this change.
Rename addCommentBlocks to loadSerializedCommentBlocks.

"addCommentBlocks" was pretty confusing, so it's been renamed to
"loadSerializedCommentBlocks." The parameters have been updated to be a
little more clear as well.
Don't continue showing the spinner for new reviews or those without comments.

The review dialog was continuing to show the spinner indefinitely when
opening without having an existing review. It also would continue to
show it when loading a review with zero comments.

Unit tests were updated to check for this.
Fix the check for supports_pending_changesets

supports_pending_changesets is only defined in SCMTool, not Repository.

Reviewed at http://reviews.reviewboard.org/r/4276/
Move .clearfix to defs.less

clearfix is generic code, and should really be in defs, so we can use it from
everywhere.

Reviewed at http://reviews.reviewboard.org/r/4277/