Optimize Pretty for infinite ribbon case
For a long time we have known that Pretty is less than optimal for code generation purposes as we incur some cost due to its layout functionality (which is unnecessary when, e.g., producing assembler for as).
We should fix this.
One tricky issue is that of the strict length field in the Beside constructor. @mpickering has recently been working on shrinking the FastString representation and consequently removing its cached length. This would be fine except it means that codegen performance regresses since it must walk every FastString we print to compute its length when building a Beside node. This is wasted effort in the case of codegen.