Refactor 3 = Refactor 2 + refactored KafkaStreamSuite further to elimite KafkaTestUtils, and made Java testsuite more robust

Refactor 2 - https://github.com/jerryshao/apache-spark/pull/6
- Added back the callback on add/store data
- Changed offset check to distinguish between offset not existing and offset being 0
- Added a lot of docs on the callback's semantics
- Increased timeouts

Additional changes over Refactor 2
- Refactored KafkaStreamSuite to eliminate KafkaTestUtils
- Made Java unit test more robust and less time consuming.
Hi TD, I think we can reduce the synchronized section like `synchronized { currentBuffer += data }`, otherwise adding `waitToPush` is too costly for synchronization.