Add a --sparse option to hg diff which filters the diff to include only files
that are part of the sparse profile.
When files are moved or copied across the sparse profile boundary, they will
show as added or removed (for moves) in the diff. This is the same behaviour
as hg diff --root.
When wrapping something for the duration of just this function call, you should use try/finally and put an extensions.unwrapfunction in the finally clause. That way we aren't depending on the process dying to clean this up.