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.
I think the replacement for "normal" attributes might be an RFC of its own. For the first step of this RFC, I'd be happy just to have a get/set API for attributes that doesn't read from normal attributes, and provide a facade over the current normal attributes that uses the existing node object storage. From there, you can add a new node-specific storage system, which ideally should enable orchestration primitives (compare and swap, etc.) and address your authorization use cases.

As for compatibility concerns, I think it's okay for things that used to work, like `knife node edit` to no longer function as they did before, as long as this only happens after you've opted in to the new thing, though of course we should try to minimize the disruption as much as we can.