Robust Attribute Tracing Support

I think I'm mostly concerned that the existing Node::Attribute implementation is turning into a mess, and the Chef 12 changes make for even more entry points to mutate things, and I'm not wild about the way everything is being hacked up with additional state coming along for the ride on the VividMash's and stuff.  You found stuff like the difference between the AttrArray and the VividMashes when it comes to auto-promotion of the types and a lot of other edge cases like that.  The caching stuff I bolted into Chef-12 to try to make it a bit faster are particularly ugly.  So there's that at the lowest level.  I'm not even super worried about having a proper Observable interface at this point, but the whole rest of the attribute implementation is lurching along and showing its age.  I think I've got a design for how to do it all much better, though, and I think attribute tracing would slot on top of it pretty nicely and we could wrap all the mutators fairly easily.

Getting the information injected correctly is a bit more problematic.  The use of class variables and global state will cause issues and that should get moved to the run_context or a proper Singleton class somewhere.  Then I'm just not super wild about wrapping all the things that might set a node attribute in Chef::Node::Attribute.with_tracer_hint calls (but I don't have a better solution).

So I think to begin with it'd be nice to see a cleaner implementation of how Chef::Node and friends would be able to ask for the current 'context'.  Ideally this goes into something like Chef::ExecutionTracer which is a Singleton with state on the current cookbook, file and such, and which Chef::Node can ask for the current cookbook, file and line number.  We also may be able to reuse that code in the error inspectors as well.  That would let you do a new feature as a new object, pretty much clean room, would have good separation of concerns and would be reusable outside of attributes.

Should probably come up with a better name than Chef::ExecutionTracker tho....