[SPARK-4062][Streaming]Add ReliableKafkaReceiver in Spark Streaming Kafka connector

Add ReliableKafkaReceiver in Kafka connector to prevent data loss if WAL in Spark Streaming is enabled. Details and design doc can be seen in [SPARK-4062](https://issues.apache.org/jira/browse/SPARK-4062).
Can you make the env() a def instead of lazy val. Easier to reason about when it get instantiated. In fact do you need a handle to env? You just need the conf. So the method can be `def conf() = SparkEnv.get.conf`