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.
And the other thing is that its not just what the default is.  In just trying to figure out what service provider handles a resource you'll get back an array of different ways to start/stop sysv init scripts because on ubuntu systems there's likely to be roughly 3-to-5 different providers that will work.  But you can't necessarily know based on just the operating system, particularly in a world with systemd religious warfare.  So you always get back an array and then you need to pick one.

Earlier versions of the DSL were also ugly as hell because base providers like Service::Simple were trying to see if 'better' providers were on the system and would disable themselves if they found upstart, system, etc on the system.  That created a huge mess of concerns where Service::Simple needed to know about all the things that might have superseded it.