Re-opening for incremental improvement:
The next patch further reduces token caching in DefaultSolrHighlighter, this time by "TermOffsetsTokenStream", which is used for multi-valued fields with term vectors to provide an offset based view/window into the token stream. I found the name unclear so I also renamed it to OffsetWindowTokenFilter with a comment to clarify it's used for multi-valued term vectors. I found the variable names unclear so I renamed them too. It used to call captureState & restoreState for every token; now it only does it for the first token leading into the next value. It used to use a cloned AttributeSource but I found there to be no point to that, plus it interferes with TokenStreamFromTermVector's ability to detect if payloads are desired.