[trainer] a few fixes
This PR:
- removes `model.to(device)` - it's not needed for DeepSpeed.  but primarily this allows loading models that otherwise won't load - e.g. loading 45GB (fp32) to a 40GB GPU when using Deepspeed with fp16 - as it loads only 22GB of it. But currently we load all 45GB right away and well nothing works
- decouples 2 unrelated logical things related to model parallel, which was very confusing in the previous if/else incarnation
- fixes a bug that left a deepspeed model to be  wrapped in DDP, but it shouldn't, like a few other bugs of the same kind I created as things just happened to work until they didn't. 

This PR enables t5-11b training on 1x 40GB gpu w/ Deepspeed  https://github.com/huggingface/transformers/issues/9996 

@sgugger
This is breaking sadly: with this change someone using `trainer.model` after instantiating a `Trainer` won't have it on the GPU anymore, which will make code fail. It's also best IMO if an OOM error happens sooner rather than later.

Now for deepspeed I understand why this would be necessary, so we can move the `model.to` in that case. I don't see other cases when this is useful (mixed precision with APEX and AMP keep a copy of the model in full precision)<|||||>oh, that's no problem for now. Let's do it just for deepspeed then. Fairscale might join down the road.

Actually Deepspeed doesn't even need the `.to()` call at all. So it's even simpler.

So basically this skipping `.to()` is needed for all extensions that partition or tweak the model size, so MP/DeepSpeed and this will be so for PP as well.
