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/