Refactor find_svn_ancestors() to make more generic

* svn2svn/run/svn2svn.py (find_svn_ancestors): Make 'stop_base_path'
optional so this function can be used generally to get the full
ancestry history.

* svn2svn/svnclient.py (get_first_svn_log_entry, get_last_svn_log_entry):
Add optional 'stop_on_copy' param and pass through to get_one_svn_log_entry().
Correctly crawl source_url's ancestry back to origin, if any

* svn2svn/svnclient.py (iter_svn_log_entries): Support new optional
'ancestors' param. Use that to correctly grab revision-chunks,
following the ancestry history.
* svn2svn/run/svn2svn.py (join_path, in_ancestors): New functions.
* svn2svn/run/svn2svn.py (real_main): Use find_svn_ancestors() to get ancestry
of source_url and pass that to downstream functions.
Fix iter_svn_log_entries ancestry-handling problems

Change return format of find_svn_ancestors() to include
copyfrom_path+copyfrom_rev info.  We need this in iter_svn_log_entries()
for correctly "svn log"'ing over only valid ancestry. Previously, we
were basically assuming that copyfrom_rev was always revision-1, and
trying to "svn log" on that revision-range can yield errors.

* svn2svn/run/svn2svn.py (find_svn_ancestors): Change return format
so that each entry in the array is a path+revision+copyfrom_path+copyfrom_rev
tuplet.
* svn2svn/run/svn2svn.py (do_svn_add): Minor changes to support new
find_svn_ancestors() return format.

* svn2svn/run/svn2svn.py (do_svn_add_dir): Fix local-not-remote
handling, to correctly handling directories.
More fixes to iter_svn_log_entries ancestry-handling

* svn2svn/svnclient.py (iter_svn_log_entries): Correctly use and
respect ancestors() array: look for the next copyfrom_rev, and once
we crawl past the last copy-from then start at the final
path+revision.

* svn2svn/run/svn2svn.py (process_svn_log_entry): For action='R'
don't run "svn remove" command if path_offset="", i.e. don't try to
remove the root of the WC.
Verify-mode

Add command-line args for verifying content and ancestry, i.e. for
self-testing the replay. Compare the source vs. target history to
make sure we ended-up with equivalent target revisions for each
applicable source revision.

* svn2svn/run/svn2svn.py (verify_commit): Adding.
* tests/make-ref-repo.sh: Add tests for source revisions which
we'll never have an equivalent target revision for, e.g.
svn:mergeinfo property changes.
Prevent KeyboardInterrupt's during SVN commit

* svn2svn/run/breakhandler.py: Adding
* svn2svn/run/svn2svn.py (commit_from_svn_log_entry): Use
BreakHandler to ensure that "svn commit" and post-commit rev-prop
updating happen as an atomic unit.
For options.keep_author, update via post-commit rev-prop

Rather than using "svn commit --username %author%", mirror the
source author info by setting the "svn:author" revprop post-commit
the same as we do for "svn:date" (options.keep_date). This frees us
up to be able to use --username in the future for legitimate
source/target repo auth.

* svn2svn/run/svn2svn.py (commit_from_svn_log_entry): Update
  "svn:author" via post-commit revprop rather than --username.
* README.mkd: Reflect new "svn:author" handling.
Be more quiet by default

* svn2svn/run/svn2svn.py (disp_svn_log_summary, real_main): Only
display source rev info for --verbose mode.

* svn2svn/run/svn2svn.py (commit_from_svn_log_entry): Move
"Committed revision %s." message down after the post-commit revprops
have been updated, since the commit+revprops are an atomic unit.
URL encode user-supplied source_url and target_url

* svn2svn/run/svn2svn.py (real_main): URL encode user-supplied
source_url and target_url values.
Don't use parser.error() for error messages

* svn2svn/run/svn2svn.py (real_main): Don't use parser.error() for
error messages.

* svn2svn/run/svn2svn.py (commit_from_svn_log_entry): Include source
revision # in "Committed revision ..." message, so output is still
useful in non-verbose mode.

* svn2svn/run/svn2svn.py (real_main): Rename "_tmp_wc_target" to
* "_wc_target_tmp" (keep-revnum temp WC), for "_wc_*" matching.
Don't allow starting a fresh (non-continue) replay into a non-empty target directory (by default)

* svn2svn/run/svn2svn.py (real_main): Prevent user from starting a
fresh replay into a non-empty target directory, since chances are
they wanted to do a continue instead. Introduce "--force" arg to
allow replaying into a non-empty target directory.
Fix edge-case problem with continue handling for --keep-revnum mode

* svn2svn/run/svn2svn.py (real_main): Check for --keep-revnum
problem condition inside main loop rather than ahead, so that we
compare the last target_url revision to the *next* source_url rev to
be replayed, not the *last* source_url rev that was replayed.

* svn2svn/run/svn2svn.py (keep_revnum): Use BreakHandler to ensure
that "Committed revision ..." message is always shown if we ran a
keep-revnum mode "svn commit".

* svn2svn/run/svn2svn.py (real_main): Fix "Finished at source
revision ..." message to be more accurate, to display the last
source_url rev replayed. Previously, in some cases (e.g. keep-revnum
mode) this could display the *next* source_url rev to be replayed.