Add VersionOne support.

This change adds a HostingService for the VersionOne issue tracker.

Fixes bug 2680.
Provide the foundation for JavaScript unit tests.

This introduces Jasmine for testing JavaScript code. Jasmine is a pretty
useful and popular JavaScript unit test library that can be used through
either a browser or node.js.

We supply a /js-tests/ URL when DEBUG is turned on, which will run the
test suite.

There are currently no tests, but we can start adding them by
introducing test files and bundling them into the js-tests JavaScript
bundle in settings.py. These should be in the rb/js/tests/ directory.
Add JS utility functions for working with Backbone properties.

This introduces $.fn.bindProperty and $.fn.bindVisibility, which makes it
easy to bind DOM element properties with Backbone properties. They can
be set to update any element property or any model property, and the
direction of synchronization (model-to-element, element-to-model, or
both) can be customized. Values can also be inversed (useful when
setting "disable" on an element from a "can*" on a model).

This also introduces unit tests for all the options and scenarios.
Add fallbacks for important console.* methods.

We can't always rely upon console.log and console.assert existing in the
browser. What's worse is that we can't rely on console.assert behaving
the same way. In Chrome, for instance, a failed assert will log but will
continue on in the function, causing further problems.

We now have an empty fallback for console.log, and a console.assert
wrapper that ensures we throw an exception on a failed assert.

This helps with consistency, and with our unit tests.
Fix the file format used by FileBasedCache.

Somewhere between django 1.2 and 1.3, the filebasedcache started using the
values as <file directory> rather than file://<file directory> (file URL
format). This causes issues with the current Django installs where the filebased
caches are created in the current directory starting with file:/ See the section
on File Based Cache in https://docs.djangoproject.com/en/1.3/topics/cache/
(Django 1.3) and https://docs.djangoproject.com/en/1.2/topics/cache/ (Django
1.2)

Testing done: Manual. I dint have a site install,but changed settings.py to
simulate the same effect.

Fixes bug 2826.
Reviewed at http://reviews.reviewboard.org/r/3706/
Update header: "All review requests" -> "All Review Requests"

All words but "All review requests" in the blue line were starting with capital
letters, I changed "review requests" to "Review Requests" to match the other
words.

Reviewed at http://reviews.reviewboard.org/r/3692/
Merge branch 'release-1.7.x'
Merge branch 'release-1.7.x'
Rewrite the comment dialog using a model/view split, with unit tests.

This splits up the old commentDlg singleton and replaces it with a new
CommentEditor model and CommentDialogView view.

CommentEditor keeps track of the state of a pending comment edit. This
incudes what actions (save, delete, cancel) are allowed, the text of the
comment, the actual Comment backing it, opened issue state, and the
dirty state. It also provides the actions you can make, such as saving
the contents of the editor back to the comment and to the server, or
deleting it.

CommentDialogView replaces the old commentDlg view code, but leaves all
the state handling and operations up to the associated CommentEditor. It
also splits out the list of existing published comments into a separate
sub-view.

Unit tests are included to test the majority of this new functionality.
It should help catch any major regressions going forward.

There are improvements I want to make to this as we develop our
architecture. One is to rewrite how the existing published comments list
works. Right now, it's very unclean, since it's based on how Comments
currently work and how we handle serialization/deserialization. Later,
it should get a real backing and manage its own state better.

It also doesn't prevent editing on draft review requests, but that's not
a regression, and will be covered either in a revision to this, or in
another change.