Add SettingProviders.

SettingProvider is an abstraction taking care of reading and writing
settings of a class. They allow nesting of providers and late
initialization (when initialization is done before all members that will
hold the settings have been created)