[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).
I spent some time on this today, and I am almost there. 
In fact there were a bunch issues with the unit tests as well (leaking context in case of failure, tests being run twice, etc.). I refactored them and I have this branch. Not all the unit tests in the new testsuite pass (they are commented out) can you take a look.