Fix setup.py, add proper gitignore and flake8

- A proper `.gitignore`
- `setup.py` with `requires` param.
- `flake8` except `E501`.