Attribute API 2

**NOTE:** This RFC is incomplete, the specification of the new feature is TBD.

This RFC describes a new attributes API to be added alongside the current one. The goals of this new API are:

* Separate desired and observed state.
* Structure the syntax in a way that "trainwreck" errors
  (`NoMethodError` for `[]` on `nil`) can be avoided.
* Structure the syntax in a way that attribute tracing can be
  implemented simply.
* Separate node-specific persistent storage from
  cookbook/role/environment attributes.
* Structure the syntax in a way that can be implemented efficiently.

This RFC is adapted from https://github.com/opscode/chef-rfc/pull/9 which is retracted.
Yes, I think the first one is better but still not as good as something like `attr['first.second.third.fourth.a'] = 1`. The `set` in there is "human" text but isn't part of my data so I find it distracting. I need to context switch a bit. Maybe that's something I would get used to over time, but at least right now it seems bothersome. The `=` is just easier to ignore, I'm trained to recognize it as syntax instead of data.