Finally, enable svnserve to handle a very high number of connections.

The basic idea is that we introduce a variant of serve() that checks
for the system load between serving commands.  Under high load, the
connection will be put back into the queue of connections to process.
This effectively results in a round-robin scheme.

The new scheme is currently limited to systems that support thread pools
(i.e. APR 1.3+) and the handling of idle connections is sub-optimal.

* subversion/include/private/svn_ra_svn_private.h
  (svn_ra_svn__has_command): Declare new private API.
  (svn_ra_svn__handle_command): Publish former static function.

* subversion/libsvn_ra_svn/marshal.c
  (svn_ra_svn__has_item): New utility function.
  (svn_ra_svn__has_command): Implement the new API.

* subversion/svnserve/server.h
  (serve_interruptable): Declare the new, interruptable serve() variant.

* subversion/svnserve/serve.c
  (reopen_repos): New utility function to be called instead of to
                  construct_server_baton when serving a previously
                  suspended connection.
  (serve_interruptable): Implement taking initialization code from the
                         former serve_socket and using a command processing
                         loop similar to svn_ra_svn__handle_commands2.

* subversion/svnserve/svnserve.c
  (serve_socket): Simplify calling serve_interruptable instead of serve.
  (threads): Moved here from sub_main to able to add tasks from the
             serving functions.
  (is_busy): Load check callback used with serve_interruptable.
  (serve_thread): More sophisticated task implementation for thread
                  pooled mode where we will employ a round-robin scheme
                  under high load.                  
  (sub_main): Remove local thread pool variable.

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