Completion & Context Suggester: Support real-time deleted document filtering for suggestions

Idea:
  - encode lucene docids to corresponding FST outputs
  - make sure no surface form is lost even though there may be exact duplicates
  - use encoded docids to perform real-time deleted doc filtering

Implementation & Considerations:
  - Currently the FST BytesRef Output is in the format:
     `surface_form` + `PAYLOAD_SEP` + `payload` + `PAYLOAD_SEP` + `docID`
  - Duplicate surface forms are stored uniquely with dedup bytes. (uses the `END_BYTE` before the dedup bytes, maybe we can support `exact_first` in the future)
  - `maxAnalyzedPathsForOneInput` is now dynamically set by taking into account the # of surfaces per analyzed form (to deepen the `TopNSearcher` queue)
  - This implementation modifies the `XAnalyzingSuggester` further, I think it is a good idea to make lucene's `AnalyzingSuggester` more pluggable instead in the future.
  - Minor refactoring

closes #7133
Well, it helps in that it reduces the amount of pruning, but it only guarantees admissibility due to dup surface forms that lead to multiple analyzed forms (e.g. synonyms).  Try asserting isComplete to see a test fail?

But then, this may not really matter in practice.  E.g. if all "good" suggestions were deleted and you find no suggestions as a result, maybe that's not such a big deal?  But it may be seen as buggy...