Allow pipeline services configuration for marking services as critical
<!--IssueSummary start-->
<details>
<summary>
Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards.
</summary>
- [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=26899)
</details>
<!--IssueSummary end-->
### Problem to solve
In certain cases, a failure to start a `service` should result in a job failure. Tying a service container failure to a build container failure is not currently possible.
The current healthcheck configuration for `services` raises a warning when a service fails to start. There can be several case where a warning may be raised without an issue [as described in the docs](https://docs.gitlab.com/11.7/ee/ci/docker/using_docker_images.html#how-the-health-check-of-services-works) however in other cases it would be preferable for a service container failure to result in a build container's failure.
### Target audience
- Devon, DevOps Engineer, https://design.gitlab.com/research/personas#persona-devon
### Further details
One example of this problem is when our `sast` job attempts to spin up a docker service for docker-in-docker execution. When the service fails to start, a warning is generated but the job continues to execute, eventually failing as it depends on the service but it was not clear the service failed to start.
```
Running with gitlab-runner 11.6.0 (f100a208)
on ci-runner-2 xwRbLsB8
Using Docker executor with image docker:stable ...
Starting service docker:stable-dind ...
Pulling docker image docker:stable-dind ...
Using docker image sha256:5b626cc3459ad077146e8aac1fbe25f7099d71c6765efd6552b9209ca7ea4dc1 for docker:stable-dind ...
Waiting for services to be up and running...
*** WARNING: Service runner-xwRbLsB8-project-26-concurrent-0-docker-0 probably didn't start properly.
Health check error:
ContainerStart: Error response from daemon: Cannot link to a non running container: /runner-xwRbLsB8-project-26-concurrent-0-docker-0 AS /runner-xwRbLsB8-project-26-concurrent-0-docker-0-wait-for-service/service (executor_docker.go:1321:0s)
Service container logs:
2019-02-21T15:57:51.502610505Z mount: permission denied (are you root?)
```
### Proposal
Add a configuration option to [the `services` settings map](https://docs.gitlab.com/11.7/ee/ci/docker/using_docker_images.html#available-settings-for-services) to recognize a service as critical. Possible options: `allow_failure: false (default: true)` or `critical: true (default: false)`.
```yaml
services:
- name: docker:stable-dind
allow_failure: false
```
I would argue that this should be the default behavior for all services, however this is a breaking change so I'm not sure if we would want to proceed with this modification.
### What does success look like, and how can we measure that?
When defining a service in `.gitlab-ci.yml`, if that service fails to start properly, the job should report as a failure.
### Links / references
issue