Fix issue #1809: Replace svn_client_ls and make recursive ls streamy. Make it possible to determine if the target of an svn_client_list is a file or directory by always including the listed target dirent in the result.
* subversion/include/svn_types.h (svn_dirent_t): Add note about extending the struct. (svn_dirent_dup): New function.
* subversion/include/svn_client.h (svn_client_list_func_t): New typedef. (svn_client_list): Rename from svn_client_ls4 and change the arguments to use a callback instead of putting everything in hash tables. (svn_client_ls3): Expand docstring.
* subversion/libsvn_subr/constructors.c (svn_dirent_dup): New function.
* subversion/libsvn_client/list.c: Rename from ls.c. (get_dir_contents): Call callback instead of putting things in hashes. Add docstring. (svn_client_list): Rename from svn_client_ls4 and use callback instead of hashes. Report the dirent for the target of the operation for both files and directories. (ls_baton, store_dirent): New. (svn_client_ls3): Rewrite in terms of svn_client_list.
* subversion/svn/cl.h (svn_cl__list): Rename from svn_cl__ls.
* subversion/svn/list-cmd.c: Rename from ls-cmd.c. (print_baton): New struct. (print_dirent): Rename from print_dirents, implement svn_client_list_func_t. Print one dirent. (print_dirent_xml): Rename from print_dirents_xml, implement svn_client_list_func_t. Remove useless comments. Print one dirent. (svn_cl__list): Rename from svn_cl__ls; caller updated. Use new svn_client_list. Print XML element list here if in XML mode. Refactor two nested if statements into one.