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.
Using `map()` here is a little weird, and probably wasteful. Probably should use `foreach`.

Also, you can make this nicer:

    callbackBufferOpt.foreach(cbList => cbList.foreach { cb =>
      cb.function(cb.arg)
      logDebug("blah")
      })
   
(Previous comments about the Callback type notwithstanding. Also I'm never sure about what's the preferred syntax for the foreach argument - parentheses or braces.)