Dynamic configuration attributes

This pull request is a first stab at what's been (somewhat) briefly discussed in #45, and is not a final solution as of right now, but more of a playground to see how it works.

It'll introduce quite some breaking changes, so I'd like to think it through thoroughly and make sure that there's tests for possible corner cases, etc, etc. But it feels like a pretty maintainable solution compared to what's currently in `master`. I do like me some comments in configuration files, but I can definitely live without them.

Let's see how this goes.
Not quite, as using the dot notation will create new `Chef::Node::ImmutableMash` objects, so if you iterate through `node[:kafka][:broker]`, you'd get Mashes. I was just writing a cookbook to other day that rendered a Java Properties file when attributes had been defined using the dotted notation, and I intend to use the same thing in this cookbook, so then people can select how they define their attributes.

I'll also make the Log4J configuration more configurable using attributes, but I think that'll be after I've finished this part (which should be this weekend).