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?
(based on the outcome of some other comments) we need to document what the valid ways to create a config are, and specify what happens after a config is passed into a high-level type (i.e. it's copied, so changing the values has no effect)