panel: Use transparent panel depending on background characteristics

Allow making the panel completely transparent if the background
provides enough contrast for either black or white text.

The following background characteristics are used to determine the
text-friendliness of the wallpaper:

 - Normal: The background in the area around the panel does not have any
notable properties (default case, no particular CSS class)

 - Bright / Dark: The panel background is either notably bright or dark
("background-bright" or "background-dark" CSS class)

 - Noisy: The panel background is noisy and might not provide sufficient
contrast for text, this case is also returned if the color analysis
failed ("background-noisy" CSS class)

A background image can have both the Noisy and the Bright / Dark
characteristics set at the same time.

We use the transparent panel with white text by default and only switch
to the panel with dark text if the background is very bright. If the
background is noisy, we always use the opaque panel. In the overview, we
use the transparent panel with white text by default.

The "window-created" signal of MetaDisplay is used instead of connecting
to the "actor-added/removed" signals of the window_group because the
workspace switching animation reparents all windows to its own container
during the animation, which causes a lot of unnecessary calls to
_updateOpaqueState.

Co-authored-by: Alexander Mikhaylenko <exalm7659@gmail.com>

Fixes GNOME/gnome-shell#408

GNOME/gnome-shell!404
5 jobs for !404 with rescue-transparent-panel in 3 minutes and 37 seconds (queued for 1 second)
latest detached
Status Job ID Name Coverage
  Review
passed #336299
check_commit_log

00:00:31

 
  Build
passed #337591
build

00:02:02

failed #336300
build

00:00:40

 
  Test
passed #336301
test

00:00:56

passed #336302
test-pot

00:01:02