Trainer: Separate framework options from backend options
🚀 Feature

Stop mixing framework and backend options in the Trainer's constructor.
Motivation

I find it confusing both as a user and a backend implementer because it's not obvious which options affect which backend.
Pitch

The backend options could be passed as a separate, specific object:
trainer = Trainer( default_root_dir=".", pl.accelerators.GPU(gpus=8))
trainer = Trainer(  default_root_dir=".", pl.accelerators.TPU(tpu_cores=8))

This would remove the need for select_accelerator or at least simplify it by making it a simple
if isinstance(opts, pl.accelerators.GPU):
...

Thoughts ?