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?
I don't think so... I had only added this mutex so that if (certain) values were changed the *producer's* goroutines could read them safely, which is no longer necessary since we copy values in at instantiation time.