Get rid of the global lock

Previously, we always ensured that only one instance of grok-pull is
running, but this was causing intermittent problems. For example, if
there was a new large repository added, the entirety of the mirror would
stop updating while the new repository was cloned -- which could
sometimes take hours.

This change gets rid of that problem. Locks are now tracked
per-repository and there should be sufficient heuristics in place to
ensure that we can still safely clone things while running updates in
another process.