First implementation of [Issue 10](https://github.com/OpenSextant/SolrTextTagger/issues/10). Treat this as a code preview. Need to do further testing to be sure that it works. But the code seams to be able to index the Japanese language labels of Freebase.
Merge commit '2d31f52350b6405d1e79cb4f9dc965024ec70651';
Some code cleanups and formatting changes;
Removed unused Comparator;
### SolrTextTagger - Issue 10:

* Added unit tests for Synonyms and Stopwords
* while writing a test for WordDelimiterFilterFactory I discovered that it can not be supported (see [comment](https://github.com/OpenSextant/SolrTextTagger/issues/10#issuecomment-23709180) for details

Fixed the following bugs:

* IntsRef#clone() was not copying the int[]. Both - the original and cloned instance - where pointing to the same array. Because of that all paths where providing the same data (as there was only a single int[]. The new code now copies the array and uses the IntsRef constructor when cloning Path instances.
* Tagger#process() now ignores tokens with posInc == 0 (as alternate tokens are already considered in the FST)
* Tagger#process() does no longer check for "lastStartOffset > offsetAtt.startOffset()" for ignored tokens (posInc == 0)
* Paths class was not generating new Paths for the 2nd+ token at position 0 of a name
SolrTextTagger - Issue 10:

* Logging in TaggerFstCorpus#analyze() is now trace level. Basically intended for detailed debugging of TokenStreams generated by different Solr analyzer chains.
* reverted logging changes in Tagger
SolrTextTagger - Issue 10:

* Renamed "Paths" to "PhraseBuilder"
* Renamed inner class "Path" to "Phrase"
* PhraseBuilder can now be reused. This allows to create one instance per analyzed label. Now a single instance can be used to analyze all labels.
* use IntsRef[] instead of Collection<IntsRef> for returning the results (to avoid creating collection instances)
* changed log.info(..) called within log.isTraceEnabled() to log.trace(..) calls
* added files created by debug level TaggerFstCorpus calls to the gitignore list.
forgot to remove the renamed Paths class (now PhraseBuilder)
SolrTextTagger -- Issue 10: PhraseBuilder now uses posInc and offset and ignores posLen.

This new implementation of StringBuilder is based on position increment and start/end char offsets. It can successfully build phrases for all TokenStreams that would also work well for normal Solr searches. There is still the possibility to encounter TokenStreams that can not be processed. In such cases a UnsupportedTokenException will be thrown.

AFAIK all such cases would also result in unexpected search behavior of Solr. StringBuilder can even correctly encode some TokenStreams that would result in problematic search behavior. E.g.  the 'DNS => Domain Name Service' synonym example used in the "Limitation" section of [Lucene's TokenStreams are actually graphs!](http://blog.mikemccandless.com/2012/04/lucenes-tokenstreams-are-actually.html) would be correctly processed. However Synonyms like "US, USA, United States, United States of America" would fail. See comments in the code for details.

StringBuilder is implemented in a way that commons cases (Token Streams with no tokens with posInc == 0) do require only minimum additional processing. For TokensStreams containing alternative tokens it does introduce some additional processing costs.

This also updates unit tests to test support of WordDelimiterFilter and SynonymFilterFactory.
Issue10: Support for removed alternate Tokens, better logging on UnsupportedTokenExceptions, more unit tests, use QueryAnalyzer for Tagging

### PhraseBuilder:

* the PhraseBuilder now supports cases where Tokens where removed from the TokenStream (e.g. by a StopWordFilter). In such cases the PhraseBuilder needs to append tokens to phrases at earlier positions.
* Removal can make it necessary to create a branch for Tokens with posInc > 0 (see case (1) documentation in the PhraseBuilder#append(..) method.
* removal of Tokens may make it necessary to create new phrases instead of branches (e.g. if the first Token of a branch was removed). Added the according check to PhraseBuilder#branch(..)
* added unit tests for all those cases
* added hints for two possible origins for UnsupportedTokenExceptions (thrown if the PhraseBuilder is unable to generate Phrases from the TokenStream).
    1. can be caused by a combination of WordDelimiterFilter with a SynonymFilter
    2. the use of the WordDelimiterFilter after a filter that changes terms so that the length of the term does no longer match the length of the offset. In such cases the WordDelimiterFilter does not modify offsets what makes it impossible to generate correct Phrases.

### Tagger

Without proper posInc and posLen values it is very hard to determine "a phrase" to lookup in the FST. Filters that generate alternate tokens will make it hard to decide what Tokens to lookup in the FST. Multiple lookups of alternate tokens would require a lot of refactoring as each lookup currently also advances the Tags.

To avoid lookups for overlapping Tokens the Tagger now ignores all Tokens with a `posInc < 0` as well as Tokens that do overlap with an offset that was already looked up. This seams to be the best solution correctly detect multi word entities where one of the first tokens does generate alternate tokens in the token stream (e.g. "Wi-Fi network" an an Analyzer configuration including the WordDelimiterFilter).

However this can not completely rule out that the Tagger might miss some Entities for some Analyzer configurations. However this is not (only) a problem of the Tagger, but affects all Solr searches as nicely explained in the limitation section of [this Blog Post](http://blog.mikemccandless.com/2012/04/lucenes-tokenstreams-are-actually.html).

### TaggerRequestHandler

As Tagging is doing similar things as SolrQueries it now uses the QueryAnalyzer. This allows users to provide Analyzer configurations especially targeted for Tagging. A typical example would be to deactivate "catenate*" and "preserveOriginal" for the WordDelimiterFilter.

Such a configuration is now also used by  "/tag2" as used by the PosIncPosLenTaggerTest.
Merge branch 'master' of https://github.com/OpenSextant/SolrTextTagger
Reformatted
Improved logging a little
Reformat
Needed license header
Small comment improvements and a few minor things
Small comment improvements
query time comments were inverted (enabled/disabled). And query time synonym expansion was supposed to be disabled.
Document ability to use filters that posInc=0 at index time