removed additional groupby
Removed additional groupby. Closes #317

After discussion with Erik, I couldn't rationalize why the additional group_by was necessary.
The tl;dr is we no longer need it....so I removed it

Merge remote-tracking branch 'origin/pr/317' into HEAD
wrote scaffolding for filters
added language parameter
reimplemented needles with line span information built in
Removed parens and raise UnOrderedRowError
rough shape of filter
switched to dictionary representation
sorted output and wrap in contents
typos!
moved filters out to their own file + added descriptions
pylint + proper filter
making sure Filters are registered
added description for filter, and match api in ES branch
Filter Scaffolding + Needles now support column spans Closes #309

Merge remote-tracking branch 'origin/pr/309' into es
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.