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.
> We need to stop hanging arbitrary method chains off of general purpose objects like the node object ...
Yep. But we are where we are right now, so how do we get where we want to go? All the syntaxes I've proposed either have no method missing magic or restrict it to a clearly defined scope (the chef sugar option). However, to implement them, we have to add some methods to `Chef::Node`, which means we either break people outright or we give them warning and/or an escape hatch.