Add core copy detection algorithm
This adds findcopies, which detects merge-relevant copies between
files in a pair of manifests back to the merge ancestor.
While the merge code invokes the copy detection routine, it does not
yet use the result.
% file replaced with directory
adding a
% should fail - would corrupt dirstate
abort: file named 'a' already in dirstate
% directory replaced with file
adding a/a
% should fail - would corrupt dirstate
abort: directory named 'a' already in dirstate
% directory replaced with file
adding b/c/d
% should fail - would corrupt dirstate
abort: directory named 'b' already in dirstate