Remove extra commit object creation in LocalRepo

- Remove redundant Commit object creation from all methods of
  LocalRepository by passing the Commit object directly, instead of
  parsing out a Sha1 and repetitively instantiating a Commit object in
  each of the three methods used while getting the git graph.
Implement iterative solution to get git graph

The recursive solution is performing slowly, and needs to go well past the default recursive depth limit (1000) in python (the linux repo is almost half a million commits, and we better be able to parse that repo, if we don't want to get reamed by Linus!). Tried an iterative approach, but there was no significant speed increase. May need to use C for better performance, or try to access packfiles directly, instead of accessing commit objects through git CLI (using GitTerminal).