Improve metadata protocol handling
  - add MetadataRequest and MetadataResponse namedtuples
  - add TopicMetadata namedtuple
  - add error codes to Topic and Partition Metadata
  - add KafkaClient.send_metadata_request() method
  - KafkaProtocol.decode_metadata_response changed
    to return a MetadataResponse object
    so that it is consistent with server api: [broker_list, topic_list]
Rearrange KafkaClient method order to group client metadata methods together
if error code is not recognized in check_error: raise UnknownError
No more custom LeaderUnavailableError exception -- raise LeaderNotAvailableError
Refactor internal metadata dicts in KafkaClient
 - use helper methods not direct access
 - add get_partition_ids_for_topic
 - check for topic and partition errors during load_metadata_for_topics
 - raise LeaderNotAvailableError when topic is being auto-created
   or UnknownTopicOrPartitionError if auto-creation off
Dont need to use callbacks for offset fetch requests
load_metadata_for_topics should raise exceptions on explicit topic args
Raise UnknownTopicOrPartitionError immediately in ensure_topic_exists -- server is not auto-creating
Use standard exceptions in client._get_leader_for_partition()
- drop custom PartitionUnavailable exception
- raise UnknownTopicOrPartitionError or LeaderNotAvailableError
- add tests for exception raises
Add test for sending produce request to unknown topic w/o auto-creation
Add client unit tests for has_metadata_for_topic and ensure_topic_exists
Merge pull request #223 from dpkp/metadata_refactor

Metadata Refactor

* add MetadataRequest and MetadataResponse namedtuples
* add TopicMetadata namedtuple
* add error codes to Topic and Partition Metadata
* add KafkaClient.send_metadata_request() method
* KafkaProtocol.decode_metadata_response changed to return a
  MetadataResponse object so that it is consistent with server api:
  [broker_list, topic_list]
* raise server exceptions in load_metadata_for_topics(*topics)
  unless topics is null (full refresh)
* Replace non-standard exceptions (LeaderUnavailable,
  PartitionUnavailable) with server standard exceptions
  (LeaderNotAvailableError, UnknownTopicOrPartitionError)

Conflicts:
	kafka/client.py
	test/test_client.py
	test/test_producer_integration.py
	test/test_protocol.py