Passing these through the generic JsonValue path was causing us to instantiate temporary JsonValues that incurred a heap allocation. This avoids that by adding specialized overloads for string types.
These are two new types that allow serializing JSON on-the-fly as it's generated, without building the whole JSON in memory first.