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.
So the `provides?` query returns true if a resource says it can operate successfully, whereas the `handles` query returns true if a resource has the system requirements available to actually run, correct?

For example, the systemd service resource would respond true to `provides?` on Ubuntu 12.04 and 14.04.  But it would only respond true to `handles?` on 14.04 because that is the only Ubuntu instance that actually has systemd installed, correct?  (These are assuming fresh Ubuntu installs, of course)