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.
This creates another allocation every time for this abstraction. But it's completely an internal implementation detail of the collection. If we just used object, there will be no extra allocations but we have to pay an `as` cast. Not sure which is more expensive