Extdiff was always making a temporary directory and copying files even when not required. This change makes extdiff avoid the copy when diffing a single file that lives in the wc. This lets external diff tools edit the working copy file directly. It also lets other extensions resuse the functions in extdiff and get in-place diffs.
Made the status info only display in verbose mode since most hg commands aren't so chatty. This also makes it cleaner for other extensions to call extdiff.
- files that comes from a different branch are marked as modified
but aren't present in the original manifest
- add a testcase for extdiff and for regular diff
diff-like tools usually return 1 if differences are found.
Currently the extdiff returns 256, but that's a different topic
(consolidating return code handling in hg).