`VisualBrush`es need to get delegated back to the renderer for
rendering, so added an `IVisualBrushRenderer` interface which is
implemented by the renderers, and pass this when creating drawing
contexts. Only currently implemented/tested for D2D and
`ImmediateRenderer`.
Don't try to render `VisualBrush`es in TileBrushImpl - visual brushes
need first to be transformed into images and then rendered as an
`ImageBrush`. To this end, renamed `TileBrushImpl` as `ImageBrushImpl`
(in D2D backend only for now as that's what I'll get working first).
Actual visual brush implementation not yet done.
Layers are now calculated by SceneBuilder and stored in Scene. This
means we are no longer accessing `visual.Opacity` from the render thread
(and `VerifyAccess` calls have been placed in AvaloniaObject.GetValue
and friends to ensure this cannot happen). ControlCatalog is now
rendering mostly fine.
Because it needs to be shared between the UI thread and the render
thread. This also required making it non-disposable like the other
graphics primitive impls.