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?
this is a subtle behavior change...

Given that, as of this PR, you can (again) easily create a struct literal to define your config, we should find a way to support that (previously it would just set the defaults underneath when you "used" it).

We're back to dealing with a similar issue from #42 

But here's where it gets tricky, can we reliably figure out what you've set vs. the zero value (so that we could set defaults for values that hadn't been specified)?