Add support for model level dataclass/config class
State: closed | Pull request: yes

# Changelog
- Adds ModelPT level support for Dataclass and infrastructure to merge dataclasses with OmegaConf/Hydra overrides
- **[Prototype phase]**

# PR overview
 - At the model level, enable potential signature `ModelPT(cfg=Union[OmegaConf, ModelPTConfig], ...).
 - Support hybrid override approach - dataclass for base config, hydra/omegaconf for user provided overrides.
 - Explore potential drawbacks of usage
 - Explore interop with Hydra.

# Examples
- A test case which creates a Model config and then updates with existing model.cfg attributes.
- Two scripts which explore hybrid Dataclass + yaml overrides and full structured config workflow
   - For hybrid workflow, notice reduced number of config parameters (some more can potentially be removed if we dont want to allow users to override easily using Hydra).
   - For full structured config workflow, shows the severe overhead in code to describe model architecture and supporting components etc.

# Limitations
 - This PR does not explore / operate on Hydra's ConfigStore. It uses base dataclass and interops at OmegaConf level only. This is by design.
 - ConfigStore does not interop with the hybrid approach, and it is not practical to provide entire config of model etc from command line. 
 - A middle ground might eventually be possible with a signficantly concretized version of `EncDecCTCModelConfig` - say as a `Quartznet15x5CTCConfig`, which described explicitly the entire model architecture and most of the supporting components, but all in code.
  - This is very high cost to develop for all variants of the Model. Imagine Jasper10x5, Jasper5x5, QN15x5, QN5x5 etc and all that code.

Signed-off-by: smajumdar <titu1994@gmail.com>

This pull request **introduces 1 alert** when merging 02d1de2a5df5480faf148a0623fcfa60089a3cff into c09012b6018243861a59a51401393bc8d64c163b - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-7e2ade19bb3ce1e9ccec72842028c33c8fea56c0)

**new alerts:**

* 1 for Unused import

@blisc  `_target_` is required as a validation. The config merge explicitly fails when trying to merge with the yaml override config otherwise. 

As to why I wrote the class explicitly in string, that can be corrected by import + helper function. I will do that in next iteration. 

This pull request **introduces 2 alerts** when merging 31a354d69ec750100ef8e892dbce87af36e354df into cd55594e0f60a4bcbaf6d0e4196c1404591e0076 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-a407e6697580ef067f80b8541e67e118f40c77dc)

**new alerts:**

* 2 for Unused import

@ericharper @tkornuta-nvidia @blisc Please find two example scripts with proposed hybrid and full config structure. Also updated readme.

This pull request **introduces 2 alerts** when merging f7017c4ede0b4e7c2a8499ccdbb56b2f82680398 into d28114ae203558a0bd1bcc69e78aeb957ea9ed5e - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-d44408e5b20dfc1a965eaa3a143c853dea910a30)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging add0e9a8b287127294ded478859f1e2d51989304 into d28114ae203558a0bd1bcc69e78aeb957ea9ed5e - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-9dae3b1b4ac42e4d1793ebbd34c21293bae4aca8)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 4976f68907f5675ec24dfdf2d009d760c2507dfb into d28114ae203558a0bd1bcc69e78aeb957ea9ed5e - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-3c969fd465ba1b2fad4c01d869c747362d03ee48)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 43b8e7632aae7d162231458b436028bbc452bf96 into e82ff1863bf750673400592a8220d63dff51933a - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-c199742b48b43d34c2b74c2b40779000d3e38318)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 2d91036768bdd1341d89b831744798e9b1354358 into cb0002f29c847915e5104aa780d5ebe49ec16f95 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-202df967a093917201b02ebedc54cfb2ec80e013)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging f38f36e938a7f6cecae39f23d73c84886e726b88 into fb802c524d784da616e7fe7788255ef89520682d - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-92796a87651732adfe270e04f672dc2af4013012)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 8757286b9f34ae9d555592bf296a3d7ead217ca2 into 30b2ed2a84b5e568d15b97079b15a9559450f480 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-2b138e9caefb3613dfe2a292aac3be2cf1576bd9)

**new alerts:**

* 2 for Unused import

This pull request **introduces 3 alerts** when merging ea66b30e34b0333158295383cb277dc368fae5d1 into 30b2ed2a84b5e568d15b97079b15a9559450f480 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-2f0cfb0066e0600f9a9233587b9cbaa393038ac7)

**new alerts:**

* 3 for Unused import

This pull request **introduces 2 alerts** when merging 3aeba48af08a79bb806644590cf0872f2fb053ac into 30b2ed2a84b5e568d15b97079b15a9559450f480 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-1188f81522a773470787ad486303dd319e9d51f2)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 83296229e02eb8385c2277a6d85423763b185179 into 30b2ed2a84b5e568d15b97079b15a9559450f480 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-17cb2f0cc2c96c8ed8db821489d61750de596b6e)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 06e6cdd7ec28d3ddc881344bdc8798d2f6485a1c into 4e804fd88bc197d031e97972957d8ad21e0c002f - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-c067612c28552566e7cf5d388ceca2a288b62620)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging f7c592d251de2612974b049e3f5b219a70495225 into 5572c82c0ba0c160eb940e94c2954886203abba6 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-74021030c1049dfcbdccb0e5ec0d75411589519a)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 73e3f05783d269f357350969469f5a9d7d33b395 into 17357c0752b6c323644b17ca62188830ca53cc85 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-5ef467d5822933235cdb162c26a78950404d984f)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 869ba22adbe71d0415e0d07fc6c4bae75dd7ba4d into b38af60fec6fe0bc527eb88413306ff7713251d9 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-215bb908060ccee2e180bdd7bfeae3ddfc232e2c)

**new alerts:**

* 2 for Unused import

This pull request **introduces 2 alerts** when merging 56ecbff74790ff5daa83ea23e225bcfa38a8d428 into 6ae02c91eadcf0293d767597231ea7803aca8ce6 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-36b94bb6e80340d9580be92b88ff5fd8abe3e096)

**new alerts:**

* 2 for Unused import