In the merge handling: make the tree conflict detection for directories work
like that in the update editor: Detect tree conflicts on entering every node,
but only report conflicts on actual changes.

This simplifies and brings together the obstruction logic, avoids touching
unrelated nodes just for testing and makes the tree conflicts more reliable.

The next step will be to hook the file code to this same system.

This patch adds a few notifications for unversioned/missing obstructions
to make these reports more similar to those of tree conflicts.

* subversion/libsvn_client/merge.c
  (CONFLICT_REASON_NONE,
   CONFLICT_REASON_EXCLUDED,
   CONFLICT_REASON_SKIP,
   CONFLICT_REASON_SKIP_WC): New macros.

  (merge_dir_baton_t,
   merge_file_baton_t): New structs.

  (mark_dir_edited,
   mark_file_edited): New function.

  (merge_file_opened): Initialize file baton.
  (merge_file_changed,
   merge_file_added,
   merge_file_deleted): Mark file edited, to trigger marking ancestor
     directories as editted.

  (merge_dir_opened): Initialize baton. Perform tree conflict and obstruction
     handling and store the result in the baton. Mark directory edit for adds
     and deletes that aren't shadowed.

  (merge_dir_changed,
   merge_dir_added,
   merge_dir_deleted): Replace obstruction check with a simple check of
     shadowed.

* subversion/tests/cmdline/merge_tests.py
  (merge_to_sparse_directories): Expect more detailed skip than a plain skip.

* subversion/tests/cmdline/merge_tree_conflict_tests.py
  (tree_conflicts_merge_edit_onto_missing,
   tree_conflicts_merge_del_onto_missing): Expect skip on the op-root that
     shadows the merge.

* subversion/tests/cmdline/tree_conflict_tests.py
  (at_directory_external): Mark Work-In-Progress until files use parent
    shadowing.


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