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)

Could not make this work with argument name being just `--` due to `commit` parameter using `nargs` of `*`.

When used `--` was getting the following (notice the values get swallowed by `commit`):

    $ flake8-diff -- hello world
    Namespace(color=u'off', commit=[u'hello', u'world'], flake8_options=[], standard_flake8_output=False, vcs=None, verbose=0)

using `--flake8-options` works as expected though:

    $ flake8-diff --flake8-options hello world
    Namespace(color=u'off', commit=[u'origin/master'], flake8_options=[u'hello', u'world'], standard_flake8_output=False, vcs=None, verbose=0)