First complete version of Kafka flowlet

Quick links:

README: https://github.com/caskdata/cdap-packs/blob/feature/kafka/cdap-kafka-pack/cdap-kafka-flow/README.md

BUILD: https://github.com/caskdata/cdap-packs/blob/feature/kafka/cdap-kafka-pack/cdap-kafka-flow/BUILD.md
Abstract base class for implementing flowlet that consumes data from a Kafka 0.7 cluster. Simply extend
from this class and implement the {@link #configureKafka(KafkaConfigurer)} method to provide information on
the Kafka cluster and the topics to consume from.
<p>
To process messages received from Kafka, override {@link #processMessage(Object) processMessage(PAYLOAD)}.
You can also override {@link #decodePayload(ByteBuffer)} to provide custom decoding of the {@code PAYLOAD} type if it is not one of the built-in support types ({@link ByteBuffer}, {@link String}, or {@code byte[]}).
<p>
For advanced usage, override {@link #processMessage(KafkaMessage)} instead to get
full information about the message being fetched.
<p/>
To enjoy automatic persisting and restoring of consumers' offsets, the {@link #getOffsetStore()} method should also be
overridden to return a {@link KeyValueTable}.
<p>
The offset type for Kafka 0.7 is a map from a broker id to a long offset. It's required because in Kafka 0.7 there is no single
leader for a given topic partition. Each broker has a different offset value, which is basically a local file
offset.