refactor login as to be impersonation with better login/logout
Modifies the existing "login as" feature to be called impersonation.
This also adds:
* Application keep track of who is impersonating the user so they can revert back to the original user without having to log out.
* Stores the user profile via `HTTP_REFERER` so you get redirected back to the person you have impersonated once you stop.
## Screenshots:


See merge request !1702
Expose builds feature
Expose builds feature in project settings (as feature).
Enable it by default for a new projects.
I deliberately named it builds instead of CI, because we actualy allow to run tests using infrastructure built-in GitLab. I'm free to change it.

If we are ok, I'll add feature tests for it.
/cc @sytses @dzaporozhets
See merge request !1767
Refactor complex methods
Make flog part of CI check which is not allowed to fail. I used high score (70) and refactored most complex method. In future releases we should lower acceptable score to something like 40..50
Part of #3444
See merge request !1794
Fix "Other Builds" links in Projects Build page
Found a minor issue where all links in the "Other Builds" section of Project Builds was linking to the same build #. This should fix it.
See merge request !1785
ApplicationSetting.current was called in every pages, cache it and expires it after it updated.
This changes will avoid a SQL query in every pages (~0.3 - 0.5ms).
```SQL
SELECT "application_settings".* FROM "application_settings" ORDER BY "application_settings"."id" DESC LIMIT 1
```
These scopes can just sort by the "id" column in descending order to
achieve the same result. An added benefit is being able to perform a
backwards index scan (depending on the rest of the final query) instead
of having to actually sort data.
Implement Build Artifacts
This implements #3028
1. It stores artifacts in shared/artifacts,
1. It adds `artifacts` to `.gitlab-ci.yml`,
1. We use GitLab Workhorse to offload artifacts uploading,
1. To download artifacts it uses GitLab Workhorse X-Sendfile extension,
1. There's one "artifact" per-build. The new upload removes previous one and creates a new one,
1. Default max artifact size is set to 100MB - this can be changed in settings.
Missing things:
1. Support for `.gitlab-ci.yml`: `artifacts: true or git-ls-files` which will upload all non tracked files,
1. Artifacts passing between builds.
GitLab Workhorse changes: https://gitlab.com/gitlab-org/gitlab-workhorse/merge_requests/5
GitLab Runner changes: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/merge_requests/46
Syntax:
```
artifacts:
untracked: true # default: false
paths: # default: empty
- bin/files
```
See merge request !1584
Display target branch on MR list when it is different from project's default
Fixes#3072
The screenshot below shows both previous and current UI state:

First merge request has default branch as a target, second one has non default branch as target.
See merge request !1741