* perf(text): measure each text once per shaping and layout width
Layout asked for the same text at the same width hundreds of times per build, and each request built and laid out a new paragraph. Sizes are now cached beside glyph coverage, keyed by the same shaping inputs, so layout resizing the box keeps them.
* refactor(text): reuse Size for measured text
* perf(text): keep measurements when a paragraph rebuilds for a new box
The paragraph cache dropped coverage and sizes whenever its own inputs changed, including a resize that reaches drawing without a graph update. Shaping compares its own inputs, so it is kept there.