Warn users about a dirty working directory.

If a user posts a change with no revision arguments, they probably want their
"current" state to be the change. We've had a little bit of confusion with Git
users who hadn't committed their changes to a branch and were upset that their
working tree wasn't posted (like it would be with svn, for example).

This change adds a warning when the user invokes rbt post without explicit
revision arguments and has a dirty working directory.

Testing done:
Posted this change with some other stuff in my working directory and saw the
warning.

Fixes bug 3120

Reviewed at https://reviews.reviewboard.org/r/5132/
Implement SVNClient.parse_revision_spec and add tests.

This implements revision parsing for the SVNClient. Like with the current
implementation for Git, you can choose to pass zero, one, or two arguments.

In the case of zero, it returns a special internal string that I'm planning on
using as a notice for the different `svn diff` invocation syntax that we have
to use for diffing the working directory.

One argument can be either a numeric/symbolic revision, a revision span, or a
changelist name. If the argument has a : in it, it's split and treated as two
arguments. If not, we use 'svn log' to determine if it's a real revision, and
if that fails, 'svn status --cl' to check if it's a changelist. If it's none of
the above, we raise an exception.

With two arguments, the two arguments must be revisions of some sort. Like with
the single argument, we use 'svn log' to turn these into actual numbers.

Unlike the Git implementation, this is not actually used for the diff
generation yet.

Testing done:
* Ran unit tests

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