add full git support

I think this is is fairly functional, 90% of use cases were already supported with the github logic.  for the remaining cases shelling out to git and using a a temp directory to store the repo seems like a reasonable way to go.  as long as the process does not crash files will be cleaned up as soon as they are not needed, and by default are stored in the os's temp dir.