Switch to QueryTree API

In preparation for adding the MultipassPresearcher, the API for extracting terms
form queries is changed.  Instead of examining the query in-place and extracting
terms recursively, we now build a nested QueryTree structure from the query, and
then extract terms from it in a second step.

Decoupling the analysis and extraction steps will allow multiple passes through
the query tree.
Move to PresearcherComponent architecture

A PresearcherComponent is a way of grouping the analysis and retrieval of a set
of queries.  Previously this was achieved by subclassing Presearcher itself, but
moving from inheritance to composition allows us to decouple the types of
queries accepted by a Presearcher, and the sort of analysis we want to perform.

This step is necessary for the MultipassPresearcher.
Move default querytreebuilder list into PresearcherComponents
Add multipass presearcher

This builds on the last few commits to add a presearcher that will analyse a
query multiple times, extracting a different set of sufficient terms at each
pass, and combining the results into a conjunction of disjunctions.

For example, the query (+foo +bar +(badger cormorant)) will produce a
presearcher query of:
(+field_1:(badger cormorant) +field_2:bar +field_3:foo)

At match time, the InputDocument is indexed into all three fields when
constructing the presearcher query.  This means that documents containing only
'foo' will not select the above query at presearcher time.
Add test for mismatches
Add QueryVisitor API

Add an API that allows clients to walk the QueryTree structure - useful for
visualizing the structures produced by the various QueryTreeBuilders.
Add more complex test for MultipassPresearcher