GitRepository now lazily-constructs its internal Repository object. This
makes the class testable since it no longer does a lot of work in its
constructor. Previously, the string passed to it had to be valid for the
Repository object to accept it.
Code for cloning the repository refactored to handle failures better.
Namely this means deleting the repository and cloning it again if there
is a failure.