status: move more logic into the model

Teach the model to filter the selection list when updating files.  This
lets us move logic out of the status widget and avoid creating callback
loops.

Signed-off-by: David Aguilar <davvid@gmail.com>
diff: ignore events when the selection model is empty

Keypress events can trigger "stage/unstage" actions even though there is
nothing on which to operate.  Detect this and exit early.

Signed-off-by: David Aguilar <davvid@gmail.com>
doc: update v1.8.4 release notes

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

We do not need to re-apply the diff when applying a diff selection as it
happens automatically when the view restores its selection.

Update the index so that we do not need to depend on the "git diff"
side-effect of updating the index, without which we would not be
detecting when files change state from staged <=> unstaged.

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