Clean up commit parsing and fix phantom commits

The functions git.Commits() and git.CommitsByFile() in git.go now rely
on a new low-level function, git.parseLog(), which executes the proper
command and uses gitParseCommit to create the actual commit array.

This commit also cleans up gitParseCommit, which was previously somewhat
sloppy.

Close #92