[Trainer] fix the placement on device with fp16_full_eval
* `do_train` isn't a reliable arg - it is not required to run `train), so for now add a workaround for the `fp16_full_eval` case to place the model on device if `train()` was called w/o `do_train=True` being passed to the Trainer args.
* while at it fix the `deepspeed` case, now that it's used in eval too, it should never be put on device
* Also `args = self.args` to make the code easier to read/shorter - there is a lot of it in `train`.

Fixes: https://github.com/huggingface/transformers/issues/11200#issuecomment-822631511

@sgugger 
We probably need to re-think the "placement on device" logic. And to do it explicitly in each stage and in `__init__` only in those special cases where it's absolutely required.