Commonizing code in option provider

* Adding ValueProviderFactoryProvider and CompositeValueProviderFactory to
  maintain parity in pattern with other option types.

Fixes #818
I don't love this namespace because we have a few different kinds of descriptors... maybe Options?