Semantic TUI render tree with stable component identities.
@type t() :: %Vibe.TUI.RenderTree{nodes: [tree_node()]}
@type tree_node() :: %Vibe.TUI.RenderTree.Node{ cache?: term(), component: term(), id: term() }
@spec new([tree_node()]) :: t()
@spec node(term(), term(), keyword()) :: tree_node()