Simplify, tidy, and improve gitignore.py

I haven't changed any externally visible functionality, but I have greatly simplified the implementation.

- Read the list of boilerplate files from disk
- Removed a bunch of duplicate code
- Removed hard-coded paths

It should now be easier to maintain this package since you won't have to update the list in gitignore.py (4 times!!) if you add/remove any boilerplate files.