Refactoring to make MegatronGPTModel dataset building more flexible
# What does this PR do ?

Refactoring to make MegatronGPTModel dataset building more flexible.

In particular this allows subclasses to use a different `build_datasets_strategy` without having to copy / paste the full `build_train_valid_test_datasets()` method.

**Collection**: `nlp`

# Changelog 
- Add a new attribute `build_datasets_strategy` to the constructor of `MegatronGPTModel` to make it easier to override the dataset building logic

# Usage

```python
from my_module import my_build_datasets_strategy

class MyClass(MegatronGPTModel):

    def __init__(self):
        super().__init__(build_datasets_strategy=my_build_datasets_strategy)
```

# Discussion

There are at least two potential controversial design choices, happy to discuss them here (marking PR as draft in the meantime):
1. Naming: the most "natural" name would be `build_train_valid_test_datasets_strategy`, but I felt it was starting to get annoyingly long, which is why I picked a shorter variant
2. Implementation: alternatively, we could (a) avoid changing the signature of `__init__()`, letting subclasses override `self._build_datasets_strategy` as they see fit (I didn't go this route because I tend to prefer customization options to be clearly exposed through the API), or (b) make it part of the config, using Hydra's instantiate feature to obtain the strategy (although I actually like this option better, I wanted to discuss it here before making changes to the config). [edit: see [comment below](https://github.com/NVIDIA/NeMo/pull/7123#issuecomment-1665501843) for a follow-up discussion]

I'll look into adding a test once the implementation is approved.

# 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?
- [ ] 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