cmds: ignore inotify updates when staging/unstaging

Staging operations with thousands of items can take a while, and inotify
may send updates while they are running.  The GUI already updates at the
end of the operation so there's no need to process the inotify events
while staging.

Add a CommandDisabled context manager to disable any command inside of a
"with" block.  Use CommandDisabled to ignore the UpdateFileStatus
command while we are inside a lengthy stage/unstage command.

Reported-by: Christian <horschi@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
perf: improve staging large numbers of files

In 6aa01795e05ac4354387c409dd38dcda52392a3e we started slicing up the
argument list when calling "git reset" and "git add" to avoid:

	errno: Argument list too long

When we did so we chose an arbitrarily small number of individual items
to process at a time.  We could have chosen a larger number to minimize
the number of times "git add" and "git reset" are called.

Choose a better heuristic so that more files are processed at a time.
This can drastically reduce the number of needed git operations when
staging hundreds or thousands of files.

Signed-off-by: David Aguilar <davvid@gmail.com>