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.
that is an excellent question.  =)  i wrote the provider side from scratch and then later went back and realized i was reimplementing the same thing that resources already had but implementing an additional dsl language.  so i fixed the dsl language to be identical on both sides.  i haven't fixed the implementations yet.

might also rub a real singleton on both of them or hang shit off the run_context as well, i'm not sure yet.