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)

These exceptions all seem almost similar - is there any way we could name one of them something more general and pass in a relevant message when raising it ?