Improve highlight API, fix an env-building bug, and finish TextFilter.

These are logically separate commits; I recommend reviewing them a commit at a time.
ah, it may be becomes I'm biased from a functional background, but I see the functions as binding the semantics of the function.

Specifically, `imapcat` instantly tells me that the internal workings involve generating an interable from each element and then concating them together.

Building it by combining a generator comp and chain require me to recognize the pattern or actually process what the function does.

Its like how if I can describe something using a reduction, I prefer it to a `for` or `while` loop. 
Ignoring some dynamic magic, `for` and `while` are strictly more powerful than the primitive recursion allowed by `reduce`