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.
Attributes still are "connected" to the node object depending on how the syntax discussion works out (though even the delegation options just imply that `attribute_access_method` is a shortcut for `node.attribute_access_method`). I'm just saying the new api won't have the problems that are caused by implementing attribute access via `method_missing` directly on `Chef::Node` because you always call `node.attribute_access_method` and not `node.some_method_that_might_be_an_attribute_or_might_not`.