config: export & list defaults

@mreiferson this is a continuation of conversation in #47

This makes all config values exported, but copies them into a separate config object in Consumer and Producer so they can only be modified before you pass to a Consumer and Producer. This should mitigate the previous need to unexport fields.

I've also added a new way to denote defaults by marking them with struct tags. I like how this comes out by avoiding comments that might stray from the code values actually defaulting. I took a slightly different approach to just panic if an uninitialized config object is ever encountered.

thoughts?
Is it important for Set() itself to be goroutine safe? The uses in consumer can easily be switched to the consumer mutex.