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.

Breakdown of this pull request:

* Extract plugin provider mapping to a class.
* move the extracted class to its own file.
* move relevant tests to a specific spec file.
* rename variables (in particular, the provides map is still called "attributes" everywhere, which is confusing).
* remove direct access to the provider map data structure in test code.