SPARK-1730. Make receiver store data reliably to avoid data-loss on exec...

...utor failures.

Added a new method in Receiver, ReceiverSupervisor, ReceiverSupervisorImpl to store the data
and callback a supplied function with a given argument.
I don't know, this type feels weird to me. It feels like the the closure itself should encapsulate any local data it needs, and any arguments here should only be the ones that the caller of the callback is passing.

e.g.:
* if BlockGenerator does not pass any arguments to the callback, the callback signature should be "() => Unit"
* if it passes a String, the signature should be "String => Unit"

In the call site, if the closure needs other data, that data can exist locally and doesn't need to be known by this code, something along the lines of:

    val somethingLocal = "foo"
    bm.store(i, () => { println(somethingLocal) })