Only clone GitLab Shell on tests if necessary.

Before this change, `tmp/test` got removed before every test, and we had to clone GitLab Shell.

Now:

- `tmp/test/gitlab-shell` is not removed before tests, only the other siblings
- it only gets cloned if the repo does not exist already
- if the repo and the correct shell version exist, it only checks out
- otherwise do a git fetch instead of a clone

Use case: allow to run tests without the Internet (airplane, GitLab.com downtime, etc.)

There is only one more Internet dependency: cloning `gitlab-test`, but that one is harder to deal with since all branches must be synced.

Still, this change already makes testing a bit faster and walks towards that goal.

Implementation notes:

- `unless File.directory?`: removed because was never used because `rm_rf` always removed `tests`, and should not be used in theory either, since if the repository is there we might want to fetch.
Do not use `%x` unless the command string contains backquotes.