gitcmds: simplify list updating logic

In the worktree_state() function, use simpler and more efficient logic
for removing unmerged paths from the modified list.

Signed-off-by: Daniel Harding <dharding@living180.net>
cmds: remove assignment to self.old_filename

The initializer for the Diff command was assigning self.old_filename,
which is unnecessary, because initializer of its parent class, Command,
performs that assignment already.  Remove the unnecessary assignment.

Signed-off-by: Daniel Harding <dharding@living180.net>
cmds: make certain commands take a single filename

The Diff, DiffStaged, and ShowUntracked commands took a list of
filenames when they were instantiated, but they each ignored all but the
first entry in the list.  Change them to just take a single filename
instead of a list, and update the callers appropriately.

Signed-off-by: Daniel Harding <dharding@living180.net>
models/main: track deleted files

git-cola was using the core.exists() function in several places to
determine whether or not a file had been deleted.  However, in certain
corner cases, this could result in incorrect behavior.  First, the
gitcmds.diff_helper() function only checked for the existence of a file
if the cached flag was True.  So, if a user ran rm <file> instead of
git rm <file>, the diff view would not have the "deleted file" header at
the top of the diff for the unstaged file.  Also, if the user ran
git rm <file> and then recreated the file (now untracked), the icon in
the Staged list would incorrectly change from the removed icon to the
staged icon.  Finally, if git-cola was used to amend a commit with
deleted files, they would be incorrectly displayed with the staged icon
instead of the removed icon.  Fix these problems by allowing the main
model to keep sets of staged and unstaged deleted files, and adapt
several places that used core.exists() function to consult the
appropriate set instead.

Signed-off-by: Daniel Harding <dharding@living180.net>