Move from .gitkeep to .gitignore

Inverts our directory keeping structure. Use native .gitignores to
preserve directories and ignore files per directory

Removes the .gitkeep for `vendor/`. Vendor is automatically created by
composer so no need to .gitkeep it.

Note that we should especially avoid the use of the `/**` glob as per http://schacon.github.io/git/gitignore.html#_pattern_format which states

>Otherwise, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname. For example, "Documentation/*.html" matches "Documentation/git.html" but not "Documentation/ppc/ppc.html" or "tools/perf/Documentation/perf.html".

Which means that if we use `**` it will fail on all terminals except the narrow slice that support the `**` glob natively.