Plugin provider cleanup

When attempting to debug the issue where Ohai 7 crashes when a plugin depends on itself, I found it difficult to understand how Ohai is mapping plugins to provided attributes. This PR refactors that mapping to a custom class so that all the code that interacts with the plugin<->attribute mapping data structure is in one place and is queried/modified with domain-specific terminology.

Still a work in progress, still need to:

* move the extracted class to its own file
* move relevant tests to a specific spec file
* possibly add test coverage
* rename variables (in particular, the provides map is still called "attributes" everywhere, which is confusing).