[SPARK-2677] BasicBlockFetchIterator#next can wait forever

On closer inspection, I guess the race only sets `isAckTimeout` because the `foreach` in `messageStatuses.remove(message.id).foreach` will guard against the race, so we won't end up failing the promise after calling success on it from the other thread.