Add support for Huggingface Hub to NeMo `from_pretrained()`
Signed-off-by: smajumdar <titu1994@gmail.com>

# What does this PR do ?

Adds the ability to use Huggingface Hub to load pretrained models. **This includes publically published models from any user that uploads their model to the hub - so it enables public contributions to NeMo from the community**.

**Collection**: [Core, Documentation]

# Changelog 
- Refactor NGC + HF Hub handling

# Note
As of right now, there are no uploaded checkpoints on the HF Hub, so the below call will fail, but we hope to have some checkpoints there soon.

# Usage

## Uploading a new checkpoint

When uploading a new checkpoint to HF Hub, make sure the name of the .nemo model matches the name of the model card itself

Example : If user ABC has model card `stt_en_citrinet_1024.nemo` then the model card should have the name `ABC/stt_en_citrinet_1024` when loading it in nemo.

## Use after uploading

```python
# Assuming you have nemo_toolkit[asr] installed ...
import nemo.collections.asr as nemo_asr

# replace `nvidia` with any username / public checkpoint repo on the hub for community checkpoints
model = nemo_asr.models.ASRModel.from_pretrained("nvidia/stt_en_conformer_ctc_medium")
```

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

## Who can review?
@okuchaiev  @ericharper 