core: never return None for stdout and stderr

Signed-off-by: David Aguilar <davvid@gmail.com>
git: small cleanups, mainly to use single-quotes consistently

Signed-off-by: David Aguilar <davvid@gmail.com>
models.main: ensure that "pull" only ever specifies a single branch

We never hit this code path, but add a flag to ensure we never get
there.

Signed-off-by: David Aguilar <davvid@gmail.com>
models.main: add an update_remotes() method

Signed-off-by: David Aguilar <davvid@gmail.com>
cmds: add a ModelCommand base class

Provide self.model and nothing more.

Signed-off-by: David Aguilar <davvid@gmail.com>
edit remotes: refactor git interaction into command objects

Move all of the git interaction into proper command objects instead of
calling git from the GUI code.

Call model.update_remotes() so that the fetch/push/pull dialogs are
updated when remotes change.

Closes #343

Reported-by: Ｖ字龍(Vdragon) <Vdragon.Taiwan@gmail.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
edit remotes: make the dialog larger by default

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