Model saving/restoring using EFF
 - [x] EFF dependency in requirements.txt (0.1.0 release)
 - [x] Modified `ModelPT.save_to()`
 - [x] Modified `ModelPT.restore_from()`
 - [x] `ModelPT.__set_eff_save()`/`Model.__use_eff_save()` static methods for manual enabling/disabling saving using EFF (flag set to `True` by default).
 - [x] unit test - polished test adding artifact
 - [x] unit test - testing checkpoint encryption when using _eff_save_to()/_eff_restore_from() with provided encryption key.

`ModelPT.save_to()` logic:
 - if EFF present and __use_eff_save flag set: save .nemo using EFF
 - else: save .nemo using the old method

`ModelPT.restore_from()` logic:
 - if EFF present: try to restore the model using EFF, if fails: try to restore using the old method
 - else: restore .nemo using the old method

In short:
 - Restore will be able to load both the existing .nemo files and the new EFF-based .nemo files
 - All newly saved .nemo files will have EFF under the hood.

Note that from the content of the archive perspective, the new .nemo archive is a superset of the old format, i.e. the old .nemo file content:
```
 + model_config.yaml
 + model_weights.chkt
 + … (additional files a.k.a. artifacts)
```
The new .nemo file content:
```
 + manifest.yaml (<- this file is the only difference!)
 + model_config.yaml
 + model_weights.chkt
 + … (additional files a.k.a. artifacts)
```