Refactored Kafka receiver logic and Kafka testsuites

Changes
- ReliableKafkaStreamSuite was running KafkaStreamSuite tests as well, as it was extending it. So refactored KafkaStreamSuite to create KafkaStreamSuiteBase.
- Used `eventually` blocks instead of `Thread.sleep` to reduce test run times. 
- Other general refactoring the in the ReliableKafkaStreamSuite to minimize duplicate code.
- Refactored ReliableKafkaReceiver to implement the better synchronization, and also improve (hopefully) code cleanliness.
Yes you are right. I thought about it as well and there is a chance that the another record can get inserted before the generateBlocks callback is called. Let me try out another way to do this.