Trainer callback breaks old code
https://github.com/huggingface/transformers/blob/ba4bbd92bcb55febbfa06aaa1551738388ec7eb0/src/transformers/trainer_callback.py#L438-L447

Currently it depends on the fact that evaluate() will first call `self.prediction_loop` https://github.com/huggingface/transformers/blob/ba4bbd92bcb55febbfa06aaa1551738388ec7eb0/src/transformers/trainer.py#L1181

which will then call `.callback_handler.on_prediction_step `
https://github.com/huggingface/transformers/blob/ba4bbd92bcb55febbfa06aaa1551738388ec7eb0/src/transformers/trainer.py#L1270

But in my old code (3.1.0), I subclass Trainer and overwrite evaluate(), without calling self.prediction_loop.

And results in this error:
```
self.prediction_bar.close() 
AttributeError: 'NoneType' object has no attribute 'close'
```

I propose we add `on_predict_begin`  and `on_predict_end`.
Or add this check in `on_evaluate`
```python
if self.prediction_bar is not None:
    self.prediction_bar.close()
```
<|||||>I think the second solution is better (since it should be there in any case). We can add the events you suggest in the first one if we find other use cases that need them.

Do you want to tackle this in a PR?<|||||>I was thinking we can move the opening and closing of `prediction_bar` into separate events, so we don't need the `if` statements. 
But it can be hard to debug if someone miss the opening, so it's probably unnecessary.

I will create a PR with the second solution.