Cleaned up setup.py and added a .gitignore

Setup now has a clear requirements and packages at the top; anyone looking at the setup.py file knows exactly what is needed and what will be produced by looking at the first few lines of the file.

.gitignore now ignores build artifacts.