Support listing Hugging Face model info
Signed-off-by: smajumdar <smajumdar@nvidia.com>

# What does this PR do ?

Add new apis to filter and obtain NeMo hugging face models via code.

**Collection**: [Core]

# Changelog 
- Adds two methods `get_hf_model_filter()` and `search_huggingface_models(model_filter=None)` to ModelPT.
- First method returns a basic ModelFilter object, can be overridden by the user. Used as default to next method if nothing is provided.
- Add support for metadata attributes to the filter to modify the result list of ModelInfo.
- `list_available_models_on_hf()` lists the nemo models that satisfy the filter.

# Usage

```python
from nemo.core import ModelPT

# You can replace <DomainSubclass> with any subclass of ModelPT.
# Get default ModelFilter
filt = <DomainSubclass>.get_hf_model_filter()

# Make any modifications to the filter as necessary
filt.language = [...]
filt.task = ...
filt.tags = [...]

# Add any metadata to the filter as needed
filt.limit_results = 5

# Obtain model info
model_infos = <DomainSubclass>.search_huggingface_models(model_filter=filt)

# Browse through cards and select an appropriate one
card = model_infos[0]

# Restore model using `modelId` of the card.
model = ModelPT.from_pretrained(card.modelId)

```


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