Redesign external commit status
Description
External commit statuses are currently using the same mechanisms as internal GitLab CI/CD pipelines.
The lack of first-class concept of external commit statuses is causing some problems, like https://gitlab.com/gitlab-org/gitlab-ce/issues/8937.
We should redesign external commit statuses and improve these from the product perspective too. There is a related issue describing Checks API
The point here is to make external commit statuses a first-class concept in the backend code, instead of completely reusing internal CI/CD pipelines.