Improved XML tag search support.

- Made CorpusQL parser accept all different kinds of tags at any
position
- Added simple tag attribute search
- Fixed concordance making for zero-length spans
- Removed TextPatternEndsAt, TextPatternStartsAt (no longer necessary
because of TextPatternEdge)
- Converted TextPatternTranslator from interface to abstract class
Fixed SpanQueryTags not handling nested tags properly
XML tag indexing and search improvements.

* Both start and end tags are indexed at the following token now (a
dummy token may be added at the end of the document to index any final
tags)
* Changed SpansTags to deal with empty XML elements between tokens. This
was a problem because we don't know the order of tags between tokens at
search time.
Made it possible to specify desired context size for a Hits object.

Context size (number of words around hit) is used for sorting on left or
right context and for generating concordances.
Removed ComplexField.getProperty(propName, altName)
Improved grouping and per-document results; some API improvements.

* Added Searcher methods without fieldName parameter (contents
field is used by default) for cleaner code
* Changed order of parameters for Searcher.find(),
Searcher.createSpanQuery() methods to put the
TextPattern first and the (optional) fieldName second.
* Made DocProperty, DocGroupProperty and GroupProperty classes similar
to HitProperty classes (use HitPropValues instead of Strings, use
HitPropValue.toString() instead of getHumanReadableIdentity(), provide
get() and compare() methods)
* Added serialize and deserialize methods to
HitPropValue() to easily pass these values in GET URLs (useful e.g. when
viewing hits from a specific group to pass the group identity). To
deserialize a serialized HitPropValue, call the static method
HitPropValue.deserialize().
* Provided a few more specific compare() methods in the above classes
for efficiency.
* Changed order of parameters in Hits() constructors; made fieldName
optional (uses contents field from Searcher by default).
* Used constants instead of repeating "contents" all the time.
* Deprecated Hits constructor taking a Spans (use the one taking a
SpanQuery instead, it's more efficient)
Merge remote-tracking branch 'origin/master'
Made TextPatterns automatically simplify themselves when possible.

* Moved TextPattern rewrite logic from explicitly-called
getAppropriatePattern() to implicitly-called rewrite(). Just use the
constructor now instead of getAppropriatePattern().
* Deprecated TextPatternTranslatorQuery as it's not very useful
* QueryTool now prints out the generated SpanQuery as well
Searcher now inspects the index to determine its structure.

You can query it using Searcher.getIndexMetadata().
Renamed IndexMetadata to -Structure to avoid confusion with document
metadata.
Fixed small bug in TestTextPatternRewrite
Fixed ant build by including dummy tests for regex and wildcard.
Fixed SpanQueryFiltered not rewriting its clause
Improved support for case- and diacritics-sensitivity.

* Added TextPatternSensitive to specify case/diacritics sensitivity
preferences for a query
* Made sure atomic queries (term, prefix, regex, etc.) are lowercased
iff case-insensitive search is active
* Replaced fieldName parameter to translator methods with
TPTranslationContext, which contains more details about the current
"environment" (such as the preferred case/diacritics-sensitivity)
* Added method IndexStructure.print() which dumps the index structure in
human-readable form
* Added method IndexStructure.getDocumentTitleField() which guesses
which metadata field contains the document title (to use for display)
* Removed TextPatternTranslatorQuery
Added filter, sensitive, doctitle and structure commands to QueryTool

* filter filters on metadata (Lucene query syntax)
* sensitive on|off controls case/diacritics sensitivity
* doctitle on|off controls whether to show document titles in results
* structure shows the index structure
Fixed TextPatternWithin not rewriting its clauses.

Made TextPatternWithin derive from TextPatternCombiner (like
TextPatternContaining).
Updated IndexAlto to support the 'create' parameter.
Added collocations feature to find words occurring near hits.

* Hits.getCollocations() builds collocations from the set of hits with
the current context size.
* Added support to QueryTool ("colloc" command)
Fixed crash bug when sorting on a metadata field that's not defined for
all documents.
Improved field naming scheme for the Lucene index.

- added convenience methods for constructing bookkeeping field names for
complex fields
- added better Lucene field naming scheme, requires re-indexing (default
is still the old version) (see ComplexFieldUtil for details)
- did some prep work for eventually having the main property of a
complex field be named like the other properties (now it's a nameless
property in the index, while in queries it's usually called "word")
- made sure alternatives of the main property don't also store
character offsets as this wastes space
- made IndexStructure detect the naming scheme used in the index