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.
#3 is just node['os'] vs node['platform_family'] - all of 'linux' vs. rhel vs debian vs arch/gentoo/slackware/etc/etc.

#2 you don't have a single provider, Service::Init loves to show up all over the place so those rules mostly knock that one out.

#1 yep, comments, docs, refactoring, this is just minimally functionally working.