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.
I went with default_for to begin with, but that didn't work well.  It has to be dynamic since the system admin may have systemd installed on an old system (optionally) or may not removed systemd (because religious warfare, see HN).  I also considered maintaining a static default platform_map, but basing it on node_map and supporting os and platform_family correctly.

Circular deps are not supported and dont really make sense.  And there is a linear progression of service providers and we can make some assumptions that if someone has systemd installed that they want systemd to win, and someone who has systemd installed but doesn't want it to be the default for sysv initscripts is insane and we eliminate that use case.