Use distributed optimizer support for multiple dtypes
# What does this PR do ?

https://github.com/NVIDIA/apex/pull/1721 adds distributed optimizer support for multiple dtypes for the grad reduce-scatters and param all-gathers. This has two main applications in NeMo:

- For GPT, most grads can be reduced in BF16 but embedding grads need to be reduced in FP32 to avoid learning issues.
- For FP8 support, weight matrices can be stored in FP8 while most other parameters (e.g. biases, layernorm params, embeddings) are in BF16. In upcoming work, we would like to handle FP8 and BF16 param all-gathers in the same optimizer.

This approach is much nicer than the old approach for mixed BF16/FP32 grad reductions (https://github.com/NVIDIA/NeMo/pull/5920), and is also compatible with the distributed checkpoint format (https://github.com/NVIDIA/NeMo/pull/7116, https://github.com/NVIDIA/NeMo/pull/7281). I confirm I've been able to save and load models with different parallel configs and grad reduction dtypes.

**Collection**: NLP

# Changelog 
- Remove old distopt infrastructure for mixed BF16/FP32 grad reductions
- Add type hints to distributed optimizer wrapper

# Usage

Set the optimizer to `distributed_fused_adam` in the config file:

https://github.com/NVIDIA/NeMo/blob/f8be40b75ee1f8437b56fcc9602dc2aaddfb0643/examples/nlp/language_modeling/conf/megatron_gpt_config.yaml#L228

Configure the optimizer with `grad_sync_dtype: bf16`.

# 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)
- [ ] Did you write any new necessary tests?
- [ ] Did you add or update any necessary documentation?
- [x] Does the PR affect components that are optional to install? (Ex: Numba, Pynini, Apex etc)
  - [ ] 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
* Depends on https://github.com/NVIDIA/apex/pull/1721
* Will break checkpoints for models that are using mixed BF16/FP32 grad reductions