Modular refactor

This also addresses:
* #13 (dup of #1)
* #12 by using `--flake8-options`
* #11 
* #10 
* partially #8 by adding VCS package where other VCSs could be added just by adding a module
* partially #4 (`source..target` is implemented in git)

had to use `shell=True` here vs using `cmd.split()` because otherwise some commands would get executed incorrectly since `split()` would split in places where string should be kept alone (like in a `diff` subcommand in `git difftool`):

```
>>> """/usr/bin/git difftool -y -x 'diff --new-line-format="%dn " --unchanged-line-format="" --changed-group-format="%>"' origin/master -- /path/to/file""".split()

['/usr/bin/git',
 'difftool',
 '-y',
 '-x',
 "'diff",
 '--new-line-format="%dn',
 '"',
 '--unchanged-line-format=""',
 '--changed-group-format="%>"\'',
 'origin/master',
 '--',
 '/path/to/file']
```