SPARK-2565. Update ShuffleReadMetrics as blocks are fetched

can we add a `private[spark]` setter for it and explain it should only be used when recreating objects from JSON? I find it weird to expose this as a var since now users should not ever modify this directly - if someone looked at this class that would be non obvious. So I'd say we keep the var private and we add a private[spark] setter and say in the doc it should only be used during JSON deserialization.