add NGramAnalyzer based on NGramTokenizer

There's no default, it's whatever we want (`StandardFilter`, say). I guess it should be configurable too, but it's pretty involved if we want to capture everything. I suggest we model after the simple analyzer for now, which just does ` return new TokenStreamComponents(new LowerCaseTokenizer(matchVersion, reader));`