Batch and smart batch support for pipelines.
# 🚀 Feature request

## Motivation
I want to use `TextClassificationPipeline` to classify a large number of texts.
The naive approach is:

```python
model = AutoModelForSequenceClassification.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir)
pipeline = TextClassificationPipeline(
    model=model,
    tokenizer=tokenizer,
    framework="pt",
    device=0,
)
results = pipeline(unlabeled_text_list)
```

But this gives me CUDA OOM error when `unlabeled_text_list` is long.

What about adding batch support that lets you specify the batch size and maybe also support for multiprocessing tokenization?

When possible smart batching would be nice. See this: https://github.com/UKPLab/sentence-transformers/issues/454#issuecomment-699496454

What do you think?
I see the following requirements:

1. automatic batching
2. maybe smart batching
3. multi GPU support
4. Tokenization with multiple processes in parallel to the prediction
5. `max_length` and `truncation` support
<|||||>This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
