some low-level tweaks to extensible queries (#214)
refactor: everything is like a plugin query (#214)

The initial idea for this refactor was motivated by the need to make
PluginQuery.match() have the same method signature as the match() methods on
other queries. That is, it needed to take an *item*, not the pattern and
value. (The pattern is supplied when the query is constructed.) So it made
sense to move the value-to-pattern code to a class method.

But then I realized that all the other FieldQuery subclasses needed to do
essentially the same thing. So I eliminated PluginQuery altogether and
refactored FieldQuery to subsume its functionality. I then changed all the
other FieldQuery subclasses to conform to the same pattern.

This has the side effect of allowing different kinds of queries (even
non-field queries) down the road.
refactor RegexpQuery to use new FieldQuery (#214)
split FieldQuery into base and registered versions
refactor query parsing

It's long overdue that the parsing of individual query components was moved
out of classes and into top-level functions, where it belongs.
initial support for non-field queries

With this change, we can get slightly closer to letting plugins extend the
query syntax with queries that don't pertain to a specific field. This will
likely need some more tweaking in the future, but it should allow for
some very interesting things.
fix construction of conditional path queries

I broke this in the last flurry of refactors but, as is usually the case, I
have no idea why it ever worked before.