make changes to be more fault tolerant: clean up connections, brokers, failed_messages

- add integration tests for sync producer
- add integration tests for async producer w. leadership election
- use log.exception
Ensure that async producer works in windows. Fixes #46

As per the multiprocessing module's documentation, the objects
passed to the Process() class must be pickle-able in Windows.
So, the Async producer did not work in windows.

To fix this we have to ensure that code which uses multiprocessing
has to follow certain rules
* The target=func should not be a member function
* We cannot pass objects like socket() to multiprocessing

This ticket fixes these issues. For KafkaClient and KafkaConnection
objects, we make copies of the object and reinit() them inside the
child processes.
Merge pull request #55 from quixey/fault-tolerance

Improve fault tolerance by handling leadership election and other metadata changes

Thanks, @jimjh!
Merge branch 'master' into prod-windows

Conflicts:
	kafka/producer.py
Merge pull request #61 from mahendra/prod-windows

Ensure that async producer works in windows. Fixes #46