Reduce complexity of GitLab QA and make it easier to contribute

GitLab QA is a quite complex project in terms of a structure and how to add tests.

However most of the complexity stems from the essential complexity.

It might be hard to simplify things, but it should be easier to add tests and work on GitLab QA.

We should spend some time on thinking how to improve that. Some ideas:

Make it fully GDK compatible

It means that we should be able to add tests only using a GDK, instead of building docker images and running gitlab-qa CLI tool to spin-up environment.

Adding dotenv and .env to make it super easy to run bin/qa Test::Instance without additional arguments is the next thing that comes to my mind. #73 (closed) / https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14701

Introduce GitLab QA context component

In order to make it work, we would need to introduce Gitlab::QA::Runtime::Context class, that would detect the context GitLab QA is going to be executed in, and raise an error if we are trying to tests things that are not available in GDK. GDK is not a complete GitLab installation / environment.

Example: testing rake tasks when GitLab under a test is a fully Omnibus-configured docker container / testing rake tasks when GitLab is a GDK instance with rake tasks instantly available. We should support both, and use Runtime::Context as a strategy provider.

Improve documentation

Good docs are always important. There is a huge room for improvement here.

\cc @stanhu @rymai

Edited by Grzegorz Bizon