widget-factory: Example for edge-overshot

For extra fun, make some noise.
stylecontext: Split out functionality into custom object

GtkCssNodeDeclaration is a new struct with copy-on-write semantics.

It encapsulated the properties used to define a node in the CSS tree.

The idea is to use it in various places for caching, in particular as
key in hash tables.
stylecontext: Use node declaration in hash

Don't use the StyleInfo anymore.
stylecontext: Don't copy CSS values on context_save()

Keeping them is a bad idea now where the widget paths are actually
changed by a save(). And almost all of the time, state or style classes
will be changed anyway.

Looking them up again is just a hash table lookup anyway.
computedvalues: Add to_string() and print() functions

The functions are unused. But they are very convenient to use from a
debugger, if you know what I mean...
stylecontext: Return a ref in lookup_values_for_state

This will be necessary when we stop caching values for lookups with the
"wrong" state.
stylecontext: Handle querying the wrong state better

When a getter function (like get_color()) is called and the passed in
state doesn't match the current state returned via get_state(), we used
to do a trick: We called save()/set_state() on the context before
getting the values.

Unfortunately, since 3a337156d11a86c7a88f1f30a09276fdf6f63008 this
has the unfortunate side effect that it also creates a child element.
This breaks various old codebases (spinbutton has been fixed in
998feeb2bc3e37275cfe915e128179d2704ca9c8, Webkit is fixed in
https://bugs.webkit.org/show_bug.cgi?id=137803 ) unfortunately.

So instead, look up the values manually ensuring that no child element
is created but the correct state is used.