Add text_generation_util to support TopK, TopP sampling + Tabular Data Generation.
# What does this PR do?

Added the text_generation_util to support the MegatronLM way of text generation. It supports top_k, top_p sampling. 

Added the Tabular Data tokenizer which recognizes the tabular data structure. 
Added the unit test for column type encode and decode.
Added tabular data generation which considers the tabular data structure.

To run text generation. here is one example.
```python
python examples/nlp/language_modeling/megatron_gpt_eval.py \
            model_file=/path/gpt_model.nemo
```
the inference parameters are set in file
```
megatron_gpt_inference.yaml
```
Update: 

Included GPT inference server. To use it  
```python
python examples/nlp/language_modeling/megatron_gpt_eval.py \
            model_file=/path/gpt_model.nemo \
            server=True \
            port=5555
```
Here is the example code to run inference as a client
```python
import json
import requests

batch_size = 8
port_num = 5555
headers = {"Content-Type": "application/json"}


def request_data(data):
    resp = requests.put('http://localhost:{}/generate'.format(port_num),
                        data=json.dumps(data),
                        headers=headers)
    sentences = resp.json()['sentences']
    return sentences


data = {
    "sentences": [""] * batch_size,
    "tokens_to_generate": 300,
    "temperature": 1.0,
    "add_BOS": True,
    "top_k": 0,
    "top_p": 0.9,
    "greedy": False,
    "all_probs": False,
    "repetition_penalty": 1.2,
    "min_tokens_to_generate": 2,
}

sentences = request_data(data)

for i in range(batch_size):
    s = sentences[i]
    print(s)
```