Improve the highlighting API.

Implement separate fields' highlighting as separate methods, because I can see other, more general kinds of highlighting someday existing. For example, if we had a filter that limited results to just folders and ran ``path:bar OR (folders:yes path:foo)``, I would expect the folder icon to swell up in results that matched the second clause of the OR. A highlighter for that would be likely to return a bool (meaning "yes, swell the icon"), not a string. It becomes less weird to have separate methods for separate signatures rather than multiplexing them all into one method and dispatching amongst behaviors with a highlight_field attr.

A bonus (but not a decision-maker) is that a single filter can once again highlight multiple fields. I cannot forsee any such cases.

Also, add a default of domain=LINE to the Filter class. We might as well have a default value there to save code in some cases, and this will be the most common one by far.
Make the build env the union of all the tree-indexers' envs. Whoops.
Implement negation for TextFilter.
Implement case-insensitive text searching.

Decided to add a second trigram index rather than try to brute-force the lowercase one with JS: the number of documents could easily get very large with negated terms, like if a user typed `-print` first on the way to `-print int`.

We'll probably need some length-based governors or something eventually regardless.