Generalized the P-tuning method to support various NLP tasks
# What does this PR do ?

It generalizes the P-tuning method to support various NLP tasks including text-cls, NER, text summation, Q/A etc. It supports multiple task with one prompt encoder model. It also includes a tutorial notebook to show how to use it.

# Changelog 
- Added the decoder for the p-tuning model so it can generate any length of text.
- The prompt encoder can be conditioned on the task-tags, so it supports multiple tasks simultaneously. 
- Added the p-tune dataset. The user just need to write their own data processor to generate customized prompts for different tasks. 

# Usage
Check the notebook `https://github.com/NVIDIA/NeMo/blob/generalized_gpt_ptuning/tutorials/nlp/PTune_multiple_NLP_tasks.ipynb`



  
**PR Type**:
- [x] New Feature
- [ ] Bugfix
- [ ] Documentation

