[trainer] fix double wrapping + test
We have an issue with
```
trainer.train()
trainer.train()
```
under any environment that requires model wrapping - we currently get the wrapping multiple times - and things may kind of work - but most of the time it breaks badly - thanks to apex for complaining noisily when it's being wrapped second time.

i.e. we get things like `DataParallel(DataParallel(model))`

This PR fixes this problem and adds a test.

@sgugger, @LysandreJik 