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.
Actually it is important for rate limiting. if there is a rate limit set and the data is coming to fast, then ALL the threads should be barred from pushing data in into the buffer, until the sufficient wait has happened. So I think it should be part of the synchronized block. 

Does that make sense?

Also I dont want to make such modifications so close to the release. It will affect all the receivers if something goes wrong.