git-svn: fix occasional "Failed to strip path" error on fetch next commit

When --stdlayout and --preserve-empty-dirs flags are used and a
directory becomes empty, two things happen:

* Sometimes find_empty_directories() returns empty list and no empty dir
  placeholder file created. This happens, because
  find_empty_directories() marks all directories as non-empty, if at
  least one updated directory is non-empty.

* Sometimes git-svn dies with "Failed to strip path" error. This
  happens, because find_empty_directories() returns git paths and
  add_placeholder_file() expects svn paths

> ---
v4:
renamed {pathprefix_strip} to {path_prefix}
git-svn-test: don't test for possible bug "Failed to strip path"

In the previous commit a showcase was added to
t9160-git-svn-preserve-empty-dirs.sh for the "Failed to strip path" bug.
Now the flag --stdlayout should be enough.
git-svn: fix fetch erroneously recreating empty dir placeholder deleted earlier

The Fetcher accumulates deleted paths in an array and doesn't reset the
array on next commit. This causes different results when interrupting
and resuming the fetch.
When --preserve-empty-dirs flag is used, a path in the array can be
erroneously treated as just deleted (although it was deleted in the
previous commit) and cause the creation of an empty dir placeholder.
git-svn: fix bottleneck in stash_placeholder_list()

.git/config is written on each commit. It's slow

> ---
v4:
Instead of 'config --unset-all' use 'config --unset name value_regex' to
remove individual placeholders from the config.
git-svn: fix empty dir tracking in branches

  - When creating a tag or branch from a subdir, a disjoint branch is
    created. Then git-svn re-imports the commits using this dir as strip
    path.

    During this re-import the variable %added_placeholder is not up to
    date. Because the branch is disjoint, this variable should be empty
    in the beginning, but it's not. Because of that git-svn tries to
    delete non-existent .gitignore files and dies.

  - When creating a tag or branch from a subdir, the strip path is e.g.
    "trunk/module", but change_dir_prop() can be called with just
    "trunk". This breaks tracking of placeholder files, because it
    relies on the hash {dir_prop}, filled in change_dir_prop().

  - When creating a normal tag or branch, git-svn creates a normal
    branch without reimport, but the placeholder files in the new
    branch are not added to %added_placeholder.

This patch does 3 things:

  - It makes git-svn store paths in %added_placeholder already
    translated from "trunk/subdir/" to "tags/subdir_1.0/" during
    reimport.

  - When strip path is "trunk/subdir", don't add "trunk" to {dir_prop}
    in change_dir_prop().

  - When a normal branch is created, it takes entries in
    %added_placeholder belonging to the source branch, translates them
    to target branch and adds them to %added_placeholder.

> ---
v4:
copy placeholders to new branch AFTER initing {_save_ph}
git-svn: move placeholder tracking from git config to separate file