Rename 'impl' package to 'presearcher'

As that's what's in there...
Make Presearcher an interface

The presearcher doesn't need to keep a reference to it's parent Monitor any
more, so we can remove that and make it an interface instead.
Move presearcher test classes to presearcher package
Allow extra filtering of document tokens in presearcher query construction
Move term extractor tests to termextractor package
Set BQ.maxClauseCount to Integer.MAX_VALUE
DuplicateRemovalTokenFilter should be case-sensitive

The CharArraySet was set to ignore case, which meant that differently-cased
versions of the same term in a document were being ignored, leading to
inaccurate presearcher filters.
Add suffixes to wildcard ngrams

Just including ngrams ends up with *loads* of false positive hits.  Adding a
suffix to all ngrams should prevent this.
Use CharArraySet instead of Set<String> for charterms
Add PresearcherMatchCollector to help presearcher debugging

Running monitor.match(doc, presearchercollector) will show how each presearcher
match query was matched by the input document.
PresearcherMatchCollector should report fields as well
Add the ability to give certain fields lower weight when selecting terms to index

Say you have a query of the form:
  category:a AND text:foo*

Because text:foo* is a wildcard term, category:a is indexed in preference.
However, this will end up being run on every document in category:a, which may
be most of them.  This commit allows you to pass a set of fields to the
BooleanTermExtractor which should be weighted lower when selecting which terms
to index.
Prefer longer terms in termlist selection

Longer = less common, in general, so given two termlists prefer to index the one
that has longer terms.
Move tokenstreams from .util to .analysis
Remove unused utility class