Add ParallelMatcher

This allows you to run a match using multiple threads.
Set searchtime in CandidateMatcher.finish()

This tidies up the API a bit.  Also adds a test for matcher stats reporting.
Add a new CollectingMatcher abstract class

This tidies up the CandidateMatcher API a little more.  SimpleMatcher and
ScoringMatcher derive from CollectingMatcher, and their common logic is
abstracted here.  IntervalsMatcher and ParallelMatcher no longer need to
override the useless doMatch() method.
Use the number of cores available to determine threadcounts for ParallelMatcher
Add QueryCacheingMatcher

This is useful for debugging and/or testing.  It wraps an existing
MatcherFactory, and returns any QueryMatch objects along with the actual Query
objects that matched.
Add ExplainingMatcher
Bump version
Stop tracking IntelliJ .iml files
Refactor term weighting API to give more visibility to the debugging reporters
ParallelMatcher won't work until thread-safety concerns in MemoryIndex are fixed
Move PresearcherMatchCollector into Monitor.debug() method

Refactors the PresearcherMatchCollector to allow it to be used as part of a
normal match.  Now you can call Monitor.debug(InputDocument, MatcherFactory) and
get a PresearcherMatches object which contains information on which queries were
selected by the presearcher, as well as the matches.
add slow log

CandidateMatcher will now report any query that takes longer than a configurable
limit to run.  The limit is set by Monitor.setSlowLogLimit(), and the log is
retrieved by calling CandidateMatcher.getSlowLog()
Pure negative booleans should return ANYTOKEN during extraction

This was causing problems with queries of the form and(X, or(Y, not(Z))), where
the not clause was ignored by the termextractor, resulting in the presearcher
selecting Y over X as an indexable term, and hence docs that matched the not(Z)
branch but not the Y branch were not passing the presearcher.
Ignore MatchAllDocsQuery in boolean term extraction analysis

MatchAllDocsQuery in a boolean clause is always irrelevant to the presearcher.
Emit bare suffix from SuffixingNGramTokenFilter

This is to match queries of the type field:*
Change the way Boolean Clause branches with multiple terms are scored

The previous implementation combined weights from multiple terms in a branch by
multiplying them together.  This, it turns out, doesn't work very well, so we
move to a system where the score for a branch is calculated by a pluggable
WeightCombiner.  The default implementation selects the lowest weight of all the
branch's consitutent terms as the weight for the branch.
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.