Status widget work

This PR includes a number of changes to handle some corner cases for the Status widget, particularly for submodules and for deleted files.  In particular, it fixes the following:

* A deleted file in the Modified list will now display the deleted header in the Diff widget.
* If there is a merge conflict for a submodule, it will now be displayed in the Unmerged list instead of the Staged list.
* If a submodule is added before any commits have been made, it will now be treated as a submodule rather than as a file.
* If a deleted file in the Staged list is recreated on disk (untracked), continue to display the deleted icon in the Staged list instead of changing to the staged icon.

There are a few other refactoring changes as well.  I've tried to make a commit for each logical change so that unrelated changes don't get lumped together.