CHEF-3404: Provider Resolver

Implements lazy evaluation of which chef provider to use based on evaluating the system.  Lets the the service resource select its provider based on interrogating the system rather than assigning a single default provider per distro.  Providers encapsulate their own logic for determining which resources they support.
Yeah its just a simple key, value hash map but when you set values you qualify it with os, platform, platform_family or just a block that takes a node.   Then when you want to get the value for a key you have to pass in the node and it filters it.   The on_platform/on_platforms/platform filters are identical, but backcompat with the old resource provides syntax.  And yeah, I need more comments and debugging everywhere.