Removed dependency on Sh

First pass at refactoring code to use GitPython instead of Sh or other mechanism to call out to git binary.
GitPython provides a pure Python implementation for manipulation git objects and allows use of git binary where available.

TODO: Multiple config_problems messages are generated when the repository is invalid.

I should add that for some operations (repository creation) GitPython still relies on an external binary. But core actions (adding, editing, removing files) operates without it.
Another option that I just learned of is Dulwich (https://github.com/jelmer/dulwich). It appears to have no dependency on a git binary, even for repository creation.