Introduce a new ra api: svn_ra_session_dup() which allows opening a new ra
session from an existing ra session. While this by itself might help
performance in a few specific scenarios where opening a repository is
expensive, it also allows moving certain kinds of ra backwards
compatibility code into the ra layer itself, that are otherwise impossible.

Update two usages to add some test coverage.

* subversion/include/svn_ra.h
  (svn_ra_dup_session): New function.

* subversion/libsvn_client/diff.c
  (diff_repos_repos,
   diff_summarize_repos_repos): Showcase for testing. Update caller.

* subversion/libsvn_ra/ra_loader.c
  (svn_ra_dup_session): New function.

* subversion/libsvn_ra/ra_loader.h
  (svn_ra__vtable_t): Add member.

* subversion/libsvn_ra_local/ra_plugin.c
  (svn_ra_local__dup_session): New function.
  (ra_local_vtable): Update vtable.

* subversion/libsvn_ra_serf/ra_serf.h
  (svn_ra_serf__session_t): Add comment. Add config.

* subversion/libsvn_ra_serf/serf.c
  (svn_ra_serf__open): Store config.
  (ra_serf_dup_session): New function.
  (serf_vtable): Update vtable.

* subversion/libsvn_ra_svn/client.c
  (open_session): Add argument. Store config.
  (ra_svn_dup_session): New function.
  (ra_svn_reparent): Update caller.
  (ra_svn_vtable): Update vtable.

* subversion/libsvn_ra_svn/ra_svn.h
  (svn_ra_svn__session_baton_t): Add variable.


git-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1552324 13f79535-47bb-0310-9956-ffa450edef68