Flashlight Decoder for Nemo
# What does this PR do ?

Adds Flashlight decoding to Nemo

**Collection**: ASR

# Changelog 
- Added flashlight_decoder.py to collections/asr/modules
- Changed collections/asr/metrics/wer.py and wer_bpe.py to support new setter methods for ctc_decoding object
- Changed collections/asr/parts/submodules/ctc_beam_decoding.py to include all of the new logic for Flashlight decoding which uses the new beam search API
- Added script to scripts/asr_language_modeling/ngram_lm which creates Flashlight format lexicon files from KenLM arpa files

# Usage
Works for lexicon and lexicon-free flashlight decoding

```python
import torch

from nemo.collections.asr.models import ASRModel
from nemo.collections.asr.metrics.wer import CTCDecodingConfig

device = torch.device('cuda')
asr_model = ASRModel.restore_from(...).to(device)
files = ['/path/to/audio1.wav', '/path/to/audio2.wav']

# Lexicon-based
decoding_cfg = CTCDecodingConfig()

decoding_cfg.strategy = "flashlight"
decoding_cfg.beam.search_type = "flashlight"
decoding_cfg.beam.kenlm_path = '/path/to/kenlm.bin'
decoding_cfg.beam.flashlight_cfg.lexicon_path='/path/to/lexicon.lexicon'
decoding_cfg.beam.beam_size = 32
decoding_cfg.beam.beam_alpha = 0.2
decoding_cfg.beam.beam_beta = 0.2
decoding_cfg.beam.flashlight_cfg.beam_size_token = 32
decoding_cfg.beam.flashlight_cfg.beam_threshold = 25.0

# Lexicon-free (for char based languages like Japanese)
decoding_cfg = CTCDecodingConfig()

decoding_cfg.strategy = "flashlight"
decoding_cfg.beam.search_type = "flashlight"
decoding_cfg.beam.kenlm_path = '/path/to/kenlm.bin'
decoding_cfg.beam.flashlight_cfg.lexicon_path=None
decoding_cfg.beam.beam_size = 32
decoding_cfg.beam.beam_alpha = 0.2
decoding_cfg.beam.beam_beta = 0.2
decoding_cfg.beam.flashlight_cfg.beam_size_token = 32
decoding_cfg.beam.flashlight_cfg.beam_threshold = 25.0
decoding_cfg.beam.flashlight_cfg.unit_lm = True


asr_model.change_decoding_strategy(decoding_cfg)

transcripts = asr_model.transcribe(paths2audio_files=files, batch_size=2, return_hypotheses=False, logprobs=False)
```

# Before your PR is "Ready for review"
**Pre checks**:
- [X] Make sure you read and followed [Contributor guidelines](https://github.com/NVIDIA/NeMo/blob/main/CONTRIBUTING.md)
- [X] Did you write any new necessary tests?
- [X] Did you add or update any necessary documentation?
- [X] Does the PR affect components that are optional to install? (Ex: Numba, Pynini, Apex etc)
  - [X] Reviewer: Does the PR have correct import guards for all optional libraries?
  
**PR Type**:
- [X] New Feature
- [ ] Bugfix
- [ ] Documentation

If you haven't finished some of the above items you can still open "Draft" PR.


## Who can review?

Anyone in the community is free to review the PR once the checks have passed. 
[Contributor guidelines](https://github.com/NVIDIA/NeMo/blob/main/CONTRIBUTING.md) contains specific people who can review PRs to various areas.

# Additional Information
* Related to # (issue)
