Fix starred groups list in dashboard when user.pk != profile.pk.

The code that generated the list of the watched groups in the dashboard sidebar
was passing the wrong object in for the starred_by relation, which meant that if
the user's pk wasn't the same as the profile pk, it would show an incorrect
list.

Testing done: Set up the reproduction case and looked at the dashboard. Grepped
around to verify that nowhere else made this same mistake.
Add a fallback encoding conversion for diff content.

When trying to convert the resulting diff content to unicode, we first try
straight utf-8, and then try any encodings which were configured on the
repository. This change adds one additional step, where we try to interpret the
file as utf-8 but replace any unknown characters with U+FFFD.

Fixes bug 2776.
Reviewed at. http://reviews.reviewboard.org/r/3528/
Fix errors when manipulating the "New Review Request" field in wonky ways.

On the "New Review Request" form, if the user first chooses a perforce
repository and enters a change number, but then changes the repository type to
"None (Graphics Only)", the changenum field will still be sent to the server.
Unfortunately, NewReviewRequestForm.create() was conditionalizing only on
"changenum" and nothing else.

Fixes bug 2708.
Reviewed at http://reviews.reviewboard.org/r/3529/
Remove useless, broken supports_change_timezone conditionals.

I guess when we initially did the timezone support, we thought it might be
connected to the auth backend. The result of this was code that would hide the
field on the preferences dialog for all auth backends except the standard
builtin one, and then fail to save when users tried to change their preferences
because the field was still marked as required.

Because the timezone setting is just part of the user profile and unrelated to
the auth backend, there's no reason to have these conditionals present.

Fixes bug 2797.
Reviewed at http://reviews.reviewboard.org/r/3491/
Add better help text to the repository form's Path field.

Our help text for the Path field was a big ol' mess of information for a
variety of SCMTools, and certainly didn't scale or look readable.

We now allow SCMTools to provide their own help text for any fields they
choose (though right now, it's only used for Path). When switching tools
on the repository form, the help text for all affected fields will
change.

The existing help text has been split up into the various SCMTools we
previously documented, and cleaned up a bit.
Choose a better default for the hosting account on the repository form.

When switching hosting services on the repository form, the Account
dropdown would default to "<Link a new account>", unless there was
already a matching account selected before. This is not a good default
when there are actual, valid accounts previously linked.

Now we choose the 1st real account as the default, unless we find a
previously selected account in the list, in which case that'll be the
default.
Add API support for creating a review request with no repository.

Our API wasn't allowing the creation of review requests without a
repository. This should be allowed, as the web UI allows it, and not all
review requests going forward will have anything to do with diffs.

The 'repository' parameter is now optional. Documentation was updated to
explain the new usage of this parameter.
Fix a memory leak with the new in-database SVN cert storage.

The new SVN cert support introduced a memory leak due to a circular
dependency.

The client was holding on to a reference to the function on SVNTool,
while SVNTool was holding on to the client, preventing either from being
cleaned up.

An attempt was made at inlining the function, but as that accessed data
bound to the class, the circular dependency remained.

This appears to be an issue specifically with PySVN, as an independent
repro case could be devised for pysvn.Client's callbacks, but not those
from a mock object.

The callback is now defined as a classmethod and the only attribute it
needs, a repository, is set up as a weakptr which is then accessed by a
lambda calling the callback. This prevents the repository and SVNTool
from remaining around indefinitely.
Change the FileAttachmentComment API to require an "extra_data." prefix for extra data.

Recently, FileAttachmentComment was given support for specifying extra
data to store with a comment. This took any unknown variable and stored
it as extra data, but that meant that typos would also get stored.

Now it requires an "extra_data." prefix for any variables meant to be
stored there. That corresponds to the resulting payload, which is a
dictionary in 'extra_data'.
Merge branch 'release-1.6.x'