Updated gitignore with a more comprehensive list of files

This is a very explicitly crafted .gitignore designed to capture as much as possible in as few lines as possible.