svn: implement diff() without writes to the file system

This works great, but SVN exits nonzero if either of the paths did not exist at
that revision. For Git, any path is OK, even if it never existed in source
control. The same is true for Mercurial.