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.
At some point feature flags have to be turned on by default so you take a flag day where you break people.  As the node object accrues more methods you break more possible attributes, and then you always have this warning and deprecation period in order to roll out any new method.  And the likelihoood, particularly with many newer contributors coming on board is that breaking change to the node object get accepted and are shipped, then cause a regression then need to be rolled back and deprecations and feature flags added, then 6-12 months later we get to turn those off, then finally we get to turn the feature on in the next major release.  That sucks to just be able to add a method to an object.  The solution is to not have magical method_missing DSLs on objects where users can introduce arbitrary methods.  The method_missing trick should be restricted to mostly wrapping other objects that have defined interfaces themselves but where you don't know the methods and can't do restricted delegation.  The resource DSL and the resources attributes themselves are an exception to that since that is the way they need to behave, but that really needs to be done in a better cleanroom where the minimum amount of collision occurs and those cleanroom objects are never extended.  We need to stop hanging arbitrary method chains off of general purpose objects like the node object, its horrible software design and feature flags don't do anything to make the developer's life any better, its just adding process in the way of fixing bugs.