diff: add diff_pathspec_match

There are two kinds of pathspecs in git: ones which are pure
prefix matching (e.g., used by "git diff foo") and ones
which do file globbing (e.g., used by "git add"). While it
would be nice one day to unify these, for now they are
separate.

The globbing form already has the match_pathspec function.
Usually we don't need a specific function for prefix-matching,
because it is done as we traverse the trees. However, when
doing some diff operations (like rename following), it is
useful to be able to match a whole name against a list of
prefix pathspecs.  This patch adds diff_pathspec_match to do
this.
diff: convert single_follow to handle multiple pathspecs

The rename detection code takes as input a set of diff
filepairs from doing a straight tree diff. Destination
candidates are files which have newly appeared, and source
(renames), files which have been modified (copies), or all
files (find-copies-harder).

The single_follow option was introduced to discover the
rename source of a _single_ destination file. We cannot use
the regular diff pathspec restrictions because we need to
look at all files as possible sources.

This patch extends the single_follow concept to allow
specifying arbitrary pathspecs, which is the first step to
allowing --follow on arbitrary pathspecs.
handle arbitrary pathspecs in --follow

Traditionally, --follow handled only one single file, and
would follow that file across rename boundaries by replacing
the name of the file we are looking for at the rename
boundary.

This patch extends the --follow code to handle multiple
arbitrary pathspecs. Instead of replacing the pathspec we
are looking for, we actually append to it. We must append
rather than replace, because we may see the rename of a file
"subdir/foo" due to the pathspec "subdir". We should
continue showing other content in "subdir", in addition to
the rename source of "subdir/foo".
follow --parents wip

This just turns off the pruning restrictions, and is
probably horribly broken.