(#2384) Use confines to describe when provider features are available

Types define possible features of providers, such as "installable" or
"manages_password" and whether a provider is known to implement these happens
in one of two ways:

1. provider explicitly declares "has_feature" when instantiated
2. feature declaration lists methods that must be present on the provider

The first can only be evaluated once when the provider is first loaded.  So if
a prerequisite for the provider feature becomes available later, logic in the
provider class can't be re-executed to enable the provider feature.

This changes provider features to use the existing "confines" mechanism.  This
is currently used to check if the entire provider is suitable, but now also
individual features of the provider.  A new "methods" confine is added to
handle feature declarations based on methods available on the provider.

Both the type and the provider are able to declare confines now on a provider
feature.  The provider now has a "confine_feature" helper that adds an
additional confine for the specified feature.

Existing providers that used conditionals to declare they implemented features
based upon Puppet::Util::Features (i.e. libraries) have been changed to
declare this through a confine.

The overall object layout looks like this:

  Type <1-N> Provider <1-N> Features <1-1> Feature Confine <1-N> Confines
                                           Collection

The feature confine collection is initially built up on the type with any
confines that it specifies (i.e. method based), then cloned to the provider
when it's created so additional confines specified by the provider are added
there only.