git-gui: Performance improvements for large file sets.
Loading 6900 newly added files required about 90 seconds on one system.
This is just far too long to perform a "status" type of operation.
git-status on the same system completes in just 8.2 seconds if it is
redirected to /dev/null.
Most of our performance improvement comes from moving all of the UI
updating out of the main fileevent handlers for the status process.
Instead we are only updating the file_states array and then only doing
the UI update when all states are known and have been finally determined.
The rescan execution is now down to almost 30 seconds for the same case,
a good (but not really all that impressive) improvement.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>