Implement a runtime headless mode for Linux

This patch implements a runtime headless mode (i.e., a
--headless command line switch) that makes it possible to
use a regular Chrome binary as a headless. When the binary
is launched with this switch, the main entrypoint calls
into the Headless Shell entrypoint, effectively starting
that shell instead of Chrome.

To make this possible we must remove the dependency from
Headless to Ozone, because Ozone is a build-time feature
which is generally not enabled for regular Chrome builds.
In practice this means implementing a new headless-specific
WindowTreeHost and modifying various graphics and input
entrypoints to do something appropriate in headless mode.

Since many of the modifications are in platform-specific
code, this initial patch only adds headless support in Linux.
Other platforms will be added later.

Design doc: https://docs.google.com/document/d/1aIJUzQr3eougZQp90bp4mqGr5gY6hdUice8UPa-Ys90/edit#

BUG=612904
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/1991953002
Cr-Commit-Position: refs/heads/master@{#438239}
29 files changed