Adoption of `RenderNode` approach (#1014)
It is a simplified adoption of Android's `RenderNode`.
```kt
/**
* <p>RenderNode is used to build hardware accelerated rendering hierarchies. Each RenderNode
* contains both a display list as well as a set of properties that affect the rendering of the
* display list. RenderNodes are used internally for all Views by default and are not typically
* used directly.</p>
*
* <p>RenderNodes are used to divide up the rendering content of a complex scene into smaller
* pieces that can then be updated individually more cheaply. Updating part of the scene only needs
* to update the display list or properties of a small number of RenderNode instead of redrawing
* everything from scratch. A RenderNode only needs its display list re-recorded when its content
* alone should be changed. RenderNodes can also be transformed without re-recording the display
* list through the transform properties.</p>
```
This is a more correct approach to make `GraphicsLayer` in Compose invalidation independently.
- Moved drawing callback to C++ side to avoid extra interop costs
- Switched from `SkPicture` placeholder to custom `SkDrawable` implementation