[StatusView] Only trigger update when needed.

* Hooked StatusView to know Before and After commit events.
* By the time we check if we can commit, we have already queried the file
statuses, therefore we can use cached data to check if we can commit.
* Ignore all status changes while committing and wait for OnEndCommit
to update the status view itself.
* Moved Commit notifications to GUI thread.
* We don't need to check if we can commit in the CommitCommand, it's
only accessed from the StatusView.
* Moved commit notifications to happen after the File Status
changed notifications.