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?
We can't reliably tell. The problem case is where you intend to set the null value. (at least not without moving everything in the config struct to be a pointer).

My intention is for this to make sure no one is ever doing that and thinking things are working when they aren't. I'm ok moving this to an error but would rather it panic and never work at all.