Geometric (OpenGL-less) picking

Redesign picking to avoid using OpenGL. Previously picking involved
several GL operations per mouse movement, but now the GPU/GL isn't
used at all.

By avoiding OpenGL and the graphics driver we also reduce CPU usage.
Despite reimplementing the logic on the CPU, it still takes less CPU
time than going through GL did.

This new approach also dramatically reduces the number of picking paint
cycles required for cursor movement since the pickability of the entire
screen is calculated and cached. The cache is only invalidated when the
screen contents change so for typical desktop usage where the screen is
mostly idle, cursor movement doesn't incur anywhere near as many paint
cycles as it used to.

Performance before and after on an Intel i7-7700, tested with two
different GPUs and drivers:

|         | Intel CPU | Intel GPU | Nvidia CPU | Nvidia GPU |
| ------: | --------: | --------: | ---------: | ---------: |
| Moving around a standard 125Hz mouse:                     |
| Before  |       10% |        1% |        10% |         0% |
| After   |        6% |        0% |         6% |         0% |
| Moving around a window:                                   |
| Before  |       31% |        6% |   83% [^1] |         7% |
| After   |       27% |        6% |   44% [^2] |         7% |

[^1]: visibly stuttering on Nvidia
[^2]: visibly smooth on Nvidia

Closes: GNOME/mutter#154,
        GNOME/mutter#691

Helps significantly with: GNOME/mutter#283,
                          GNOME/mutter#590
7 jobs for !189 with geometric-picking in 17 minutes and 52 seconds (queued for 1 second)
detached
Status Job ID Name Coverage
  Review
passed #359065
check-commit-log

00:00:24

 
  Build
passed #359066
build-mutter

00:10:20

passed #359067
build-without-native-backend

00:13:11

 
  Test
passed #359094
can-build-gnome-shell

00:01:42

passed #359114
test-mutter

00:02:32

failed #359069
can-build-gnome-shell

00:00:10

failed #359068
test-mutter

00:00:10