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.
Feature flags will be good in the beginning if we have to experiment with method names ore just want to limit the initial release to the most adventurous users, but eventually we'd like to have both APIs on by default. I think we'll have to just accept the small compatibility break. The scope will be quite small since method missing attribute users are a minority, and those using the same method names we're going to use should be a very small fraction. That said, we can do:

```ruby
def attr
  if Chef::Config[:new_attributes]
    awesome_stuff
  else
    Chef::Log.warn("This might break in the future, use node['attr'] instead")
    method_missing(:attr)
  end
end
```
And when we flip the default for `Chef::Config[:new_attributes]` to true, we still give you the option to set it to false.