Allow modification of batch for `on_batch_start` hook
🚀 Feature
Allow modification of batch for on_batch_start hook in the LightningModule
Motivation
For the LightningModule there is an on_batch_start method that is called. Right now it either returns -1 signifying that training should not continue, or None. There are scenarios whereby I want to change the batch that is being returned by the DataLoader before it is being transferred to the GPU.
Pitch
Let the on_batch_start hook on the LightningModule return two variables:

The batch
Whether or not to continue training

Alternatives
The workaround that I currently have is:
def on_batch_start(self, batch):
    batch.to_pytorch_lightning_format()

Where the to_pytorch_lightning_format() will alter the Batch object such that it mimics a dictionary so that the PTL will transfer the Tensors onto the GPU. Prior to doing this, since PTL only accepts recognizes lists, tuples, and dicts the Tensors in my Batch object will not be transferred onto the GPU.
Though this isn't very desirable as it causes a side effect, ideally what I want to do is something like:
def on_batch_start(self, batch):
    batch = batch.to_pytorch_lightning_format()
    return batch

There are other use cases that I've encountered:

More fine-grained control over which sample in the batch is to be used

I've read through the relevant source code, and it seems like a simple fix (if I'm not mistaken). I'd be happy to make a PR if this is something that is aligned with the development of PTL.