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.
Sweet! `provider_priority_map` overall looks good. Few things:

1. Would be great if we can have some comments that explain the goal of this class at its definition.
2. Do we need to have entries here if we only have a single provider like Freebsd, Solaris, Macosx cases?
3. How are the `os` and `platform_family` keys are different from each other?