Fix CSV path construction so we actually find the CSVs.
Emit clang needles in the right format. Fix bug 1072537.

They were coming out as dicts. Now they are key/value pairs.

I may have screwed up annotations() by changing group_needles(), but I suspect it didn't work before anyway.
Get clang function search working.

* Rename NeedleFilter to be more descriptive. This may change again as we flesh out the various kinds of structural filter superclasses.
* Remove the blank lang and name attrs from the superclass; they should be absent so the abstract superclass crashes if not parametrized.
* Implement filter() and highlight_content(). Highlighting doesn't give the right answers atm because the data it's operating on are wrong.
* Rename CNeedleFilter to _CFilter so the plugin detector doesn't think it's a concrete filter.
* Change highlighting API to no longer require pre-sorting. highlight() has to sort all of them again anyway.
Make column numbers in row/col pairs zero-based.

This lets us use them directly as Python string slices.

We don't touch extents; those are already zero-based.
Make ending column numbers of extents a little less wrong.

Before, all extents were 0-length, as far as cols were concerned. They will still be wrong if an Extent spans lines, but it's an improvement.

Add an assertion to highlight(), because I now have much less trust in the correctness of Extents.
fixed needle tests for function needles
Rename eq__.

It's not descriptively named, and it's hard to visually distinguish from eq_.
Be consistent with indentation and with the order of "result" and "expected" in needle tests.
Simplify test_group_needles.

There was no reason to define the ignored first items of the tuples in such depth.
DRY by using @unsparsify_func on needles_by_line.
Rename pack() to key_object_pair(). Vet test_unsparsify(). Don't name a key/value pair "val"; that's confusing.

I just could not remember what pack() meant, even after looking at it for two days.
Pull the key_object_pair call out of span_to_lines.

It had nothing to do with span_to_lines and makes it clearer what by_line does when pulled up into it. Also, DRY.
Correct docs on Position index bases.
Skip test_ignores for now.

This will let us merge function-needles into es while keeping the latter green.

After fixing CSV loading in 3f86bd24adc5afa023e9857a3c1d254cd09933fe, the function-needles branch started failing because bugs in the clang plugin were suddenly exposed. The clang plugin was effectively a no-op before. Thus, things are Getting Better even if a test now fails; it was a spurious pass before.
Merge a lot of work on clang needles into es branch. Ref bug 1030312.

* Clang plugin is no longer a no-op; now it finds its CSV files.
* Needles now come out in the right format and make it into ES.
* Much refactoring
* A few tweaks to the plugin API, like no longer requiring highlight() input to be sorted

Note that process_loc likely still emits incorrect Extents; see the TODO.