Introducing RazorTextWriter

RazorTextWriter represents the result of rendering a page as a sequence of
strings rather than a concatenated string. This avoids building up large
strings in memory.
The right use case for structs is to take a typical app, and profile it. Both the execution and the memory/allocations. Then see which one wins.

Structs have some gotchas, so usually I avoid them unless it's clearly a win (with numbers to prove it).