Create a diff between a tree and the working directory using index data to account for staged deletes, tracked files, etc.
This emulates git diff <tree>
by diffing the tree to the index and
the index to the working directory and blending the results into a
single diff that includes staged deleted, etc.
0 or an error code.