New gitignore organisation

Adds per-directory .gitignore files for recursive un-ignoring. As it turns out,
globs like '**/*' don't work in .gitignore files (that is, they don't recurse).
In contrast, patterns that don't include a slash _always_ recurse, so that a
simple '!*' in the subdirectory .gitignore successfully un-ignores that whole
directory.