Handle filenames with spaces, submodules

Prior to this commit, files with embedded spaces would cause a failure to
present a diff.  Renames, copies, additions and deletions were also poorly
handled.  Finally, submodule changes were not presented nicely.

The script was re-written in Python to allow for flexible parsing of
`git diff --raw` output.