Initial work to support transactional commit to Zookeeper.

Transactional event processing: this change will make sure offsets are only committed to Zookeeper if the event is fully processed.

Instead of using `ConsumerGroup.Stream()` to obtain a channel of events to process, you have to call `ConsumerGroup.Process(callback)` with a callback function. If the callback function returns an error, the offset will not be committed, and the processing will stop.

The example application *topic_consumer.go* has been updated to reflect this change

### TODO

- [ ] On Zookeeper triggered rebalancing, commit the offset first.
- [ ] Error handling needs some work. 

@manygrams @snormore @jnormore