Since you are doing a refactoring here, is there any reason not to just call this `Receiver` instead of `NetworkReceiver`? I always found this a bit strange. In Spark most components communicate somehow over the network, but we don't call them e.g. `NetworkBlockManager`, `NetworkExecutor`, etc... 

Also since this is a very general interface, there is no reason someone couldn't build one of these that e.g. read data from a filesystem.