worker does draining
Handle broker down, restarts, and change in kafka config

Additional features are:
- Support creation of new topic, querying it and replying. fixes #2
- Buffers messages during network partition, and resends them
- Sends batches as sync calls instead of asyn calls, to ack reply
- Several more callbacks such as:

    EKAF_CALLBACK_FLUSH
    EKAF_CALLBACK_FLUSHED_REPLIED
    EKAF_CALLBACK_WORKER_DOWN
    EKAF_CALLBACK_WORKER_UP
    EKAF_CALLBACK_DOWNTIME_SAVED
    EKAF_CALLBACK_DOWNTIME_REPLAYED
    EKAF_CALLBACK_TIME_TO_CONNECT
    EKAF_CALLBACK_TIME_DOWN

- Added ekaf_demo.erl that is useful to try out ekaf
Bootstrap topic better, expose ekaf:bootstrap()

Earlier, there was a race condition since i did this from within
the ekaf metadata setup. Now taking this out, and letting the
user decide when to call it. it will now be safe.

other small refactoring, resulting in faster ekaf_server creation
for an unknown topic
Main worker gen_fsm loop will handle incoming tcp data

Earlier attempted to spawn off a pid to do so.
Bumped version to 1.3

Several optimizations, changes in callback from branch
feature/network-partitions
Corrected Demo, updated README with quickstart to run demo

The quickstart will start a mock kafka broker, and let ekaf publish to it
out of the box.

See ekaf_demo.erl for more details
Recheck for metadata changes every minute

Since partition changes dont result in tcp connections with workers
breaking, we poll this data once a minute per active topic.
Better replaying of messages once back online

Earlier had an auncaught condition
Handle metadata returning broker not ready

Metadata gives numbers 1,2,.. for various brokers
Then it gives partitions, with a broker index
But sometimes the broker for a partition isnt a valid broker
since kafka is preparing that broker

This catches that scenario, and logs it
Async calls will not keep reference in the worker

If you want to ensure they reach, use sync calls.

Sync calls get maintained in a dictionary called kv for every worker
While merging with another branch, one mistake that was meant for
sync calls were overlooked which did not break functionality, but
led to a memory leak.

async calls will fire-and-forget, and no ack hack will be attempted.

Also added an api to inspect the worker fsm
Merge branch 'feature/network-partitions'

Conflicts:
	VERSION
	src/ekaf_lib.erl