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
I did make sure that all the dup surfaces are stored in the FST (previously only the highest weight was stored). I believe that implies if there are dup surface forms (for different docIDs) then they would be counted towards multiple analyzed forms (just like synonyms). Hence I think it is admissible? I have also asserted isComplete and it has survived a lot of iterations of randomized testing.
FYI I have updated the pr to remove formatting noise.