We previously relied on ln_untracked to diff the worktree, but this is
very fragile: first, this would break with --no-ln-untracked, and we
were just symlinking *, hence did not manage properly subdirectories.
Instead, copy the tracked files similarly to what we do to checkout a
particular revision. $checkoutroot is set properly depending on whether
--whole-tree is used, so this does the right thing.