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.
So does this mean I can no longer do something like:
```ruby
mysql = attr('mysql')
mysql['version'] = '1.2'
```
What would `attr('mysql', 'version')` return then?  I only set `'1.2'` on the hash returned from the node, so my node object wasn't actually updated, correct?

If so I think an example like this could be added.  Or a line along the lines of
> The object returned from the `attr` call will not be connected to the node.  IE, updating them will not update the node's persistent state.