Add consumer group support for client
This has been implemented as a consumer_group
keyword argument for the client, allowing the client to start back up where they left off in between sessions to avoid missing messages. This can also be used to parallelize the processing of messages across multiple clients, in which messages are load-balanced across all consumers assigned to the same consumer group ID.