[SPARK-4092] [CORE] Fix InputMetrics for coalesce'd Rdds

When calculating the input metrics there was an assumption that one task only reads from one block - this is not true for some operations including coalesce. This patch simply increments the task's input metrics if previous ones existed of the same read method.

A limitation to this patch is that if a task reads from two different blocks of different read methods, one will override the other.
So BytesReadFn() doesn't return the incremental bytes read. It returns the total bytes read since the callback was created. This is why we just keep re-assigning the inputMetrics.bytesRead variable to bytesReadFn() + our starting amount. If we want to keep adding the incremental amount read, then we'd need to do some bookkeeping with how many bytes we read in. This was my original solution but made the code even harder to follow.