Handle cases where an IterableDataset doesn't produce a batch for an epoch.
🐛 Bug

If the IterableDataset for training doesn't generate any batch for an epoch, the Trainer raises a rather cryptic exception:
Traceback (most recent call last):
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/trainer/connectors/data_connector.py", line 47, in _with_is_last
    last = next(it)
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/trainer/supporters.py", line 470, in __next__
    return self.request_next_batch(self.loader_iters)
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/trainer/supporters.py", line 484, in request_next_batch
    return apply_to_collection(loader_iters, Iterator, next)
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/utilities/apply_func.py", line 84, in apply_to_collection
    return function(data, *args, **kwargs)
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 435, in __next__
    data = self._next_data()
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 475, in _next_data
    data = self._dataset_fetcher.fetch(index)  # may raise StopIteration
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 34, in fetch
    data = next(self.dataset_iter)
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
...
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 499, in fit
    self.dispatch()
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 546, in dispatch
    self.accelerator.start_training(self)
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/accelerators/accelerator.py", line 73, in start_training
    self.training_type_plugin.start_training(trainer)
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/plugins/training_type/training_type_plugin.py", line 114, in start_training
    self._results = trainer.run_train()
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py", line 637, in run_train
    self.train_loop.run_training_epoch()
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/trainer/training_loop.py", line 484, in run_training_epoch
    for batch_idx, (batch, is_last_batch) in train_dataloader:
  File "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/pytorch_lightning/profiler/profilers.py", line 82, in profile_iterable
    value = next(iterator)
RuntimeError: generator raised StopIteration

Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.

This is caused by _with_is_last as it assumes the given iterator produces at least one batch. If it doesn't, the first call to next() raises a StopIteration, which gets transformed to a RuntimeError per the new behavior in Python 3.7 (https://www.python.org/dev/peps/pep-0479/).
Please reproduce using the BoringModel

Colab link
To Reproduce
Run the colab.

Expected behavior

We should do something like the following:
    def _with_is_last(self, iterable):
        """Pass through values from the given iterable with an added boolean indicating if this is the last item.
        See `https://stackoverflow.com/a/1630350 <https://stackoverflow.com/a/1630350>`_"""
        it = iter(iterable)
        try:
            last = next(it)
        except StopIteration:
            warn('your iterable dataset didn't produce any batch')
            return
        for val in it:
            # yield last and has next
            yield last, False
            last = val
        # yield last, no longer has next
        yield last, True
If we return like the snippet above, it doesn't quite work b/c the whole training loop code assumes that there's at least one batch. We probably should re-raise the exception with a better message.
Environment
See the Colab.
Additional context
N/A