Support multiple models being instantiated in same execution scope
This pull request **introduces 1 alert** when merging a788ea5a7364e462abf1caf5c09bdcdd1751ee41 into 9c75c348bc8137717ca79a34a93c50028ffdfd38 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-43861f4a74f04ebba08b42ab74d68064cf672f88)

**new alerts:**

* 1 for Unused local variable This pull request **introduces 1 alert** when merging b6570a95e471971781d3e6def93f87762983de80 into 9c75c348bc8137717ca79a34a93c50028ffdfd38 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-18a5ed1dd2475d6de64d6fc685c0f5614d9b5c05)

**new alerts:**

* 1 for Unused local variable
# Changelog
- Model's are now attached with a one off global unique id (guid) which is registered into the global AppState for maintanence.
- AppState tracks whether the model was restored via a nemo file or via constructor and monitors an ever growing list of model restoration paths (If the model constructor was used, its restoration path is None).
- During registration of artifacts, each model registers its own copy of artifacts (via self)
- During save to, the restoration path is retrieved from AppState and artifacts are copied from the restoration file. If restoration path is None, assume local path artifacts
- During restore from, the restoration path is first registered in an ever growing list. Then the model is constructed (which allocates a GUID and registers this GUID with the restoration path).

# Bugfix
- Fixes a bug which prevents a model constructed via constructor to call save_to multiple times.

Signed-off-by: smajumdar <titu1994@gmail.com>