[Trainer] add train loss and flops metrics reports
The train wasn't reporting loss metrics (and flops it seems), this PR fixes that. Now we get:

```
***** train metrics *****
  epoch                    =        1.0
  total_flos               =      405GF
  train_loss               =     2.9435
  train_runtime            = 0:00:01.75
  train_samples            =         20
  train_samples_per_second =     11.401
  train_steps_per_second   =       1.14
```

Also moves metrics logging to when all metrics have been updated.

@sgugger 
Hmm, it broke several trainer tests:
```
FAILED tests/test_trainer.py::TrainerIntegrationTest::test_can_resume_training
FAILED tests/test_trainer.py::TrainerIntegrationTest::test_resume_training_with_frozen_params
FAILED tests/test_trainer.py::TrainerIntegrationTest::test_resume_training_with_gradient_accumulation
FAILED tests/test_trainer_callback.py::TrainerCallbackTest::test_event_flow
```

The metrics log for `train_loss` is now different:
```
    self.assertEqual(log, log1)
E   AssertionError: {'tot[14 chars].0, 'train_loss': 6.380087534586589, 'epoch': 3.0, 'step': 24} != {'tot[14 chars].0, 'train_loss': 3.9063542683919272, 'epoch': 3.0, 'step': 24}
E     {'epoch': 3.0,
E      'step': 24,
E      'total_flos': 4608.0,
E   -  'train_loss': 6.380087534586589}
E   +  'train_loss': 3.9063542683919272}
```

So either there was already `train_loss` in metrics log, but it was saving a different value, So me "fixing" it to report the value `TrainOutput` returns broke the test. or it wasn't there and it wasn't comparing the loss and now it does and it isn't the same. Need to check.

**edit:** proved to be the latter.