JSON output from diarization now includes sentences. Optimized senten…
…ce generation code

Signed-off-by: Jure Demsar <demsarjure@gmail.com>

# What does this PR do ?

Diarization with ASR JSON output now also includes sentences. This is a continuation of https://github.com/NVIDIA/NeMo/pull/3791, which I accidentally closed when cleaning up the repo.

**Collection**: [Note which collection this PR will affect]

ASR

# Changelog 

Diarization with ASR JSON output now also includes sentences.

# Usage

You can use the `examples/speaker_tasks/diarization/offline_diarization.py` script and check the output JSON file (`.../pred_rttms/uniq_name.json`).

# 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? **No.**
- [x] Did you add or update any necessary documentation? **No.**
- [x] Does the PR affect components that are optional to install? (Ex: Numba, Pynini, Apex etc)? **No.**
- [x] Reviewer: Does the PR have correct import guards for all optional libraries? **N/A.**

**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?

@titu1994, @redoctopus, @jbalam-nv, or @okuchaiev

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 #3708 (https://github.com/NVIDIA/NeMo/issues/3708)

When implementing I used an approach that changes the original codebase as little as possible. In other words, I tried to be non-invasive. After reviewing the existing code for sentences (`string_out`) preparation in `make_json_output()` of `/nemo/collections/asr/parts/utils/diarization_utils.py` I feel like the whole process could be done much more efficiently and elegantly. Currently, the sentence preparation is appending words to a string where the beginning of the string are the time stamps. When the ending time stamp needs to be corrected the code then uses string splitting to extract and replace/correct the end time value. This is quite clunky and inefficient. It would be much more elegant if time stamps and the sentences were stored and built within a dictionary and then printed out at the end.
