Abstract the configuration management implementation so that modules do not
have to manipulate nvlists directly and instead exclusively use the exposed
APIs from config.[ch].
The initial rationale for this was porting the new configuration management
framework to illumos, where nvlists exist but are somewhat different, but
centralising the nvlist implementation detail in one place seems generally
good.
This change uses a new config_node_t type for passing configuration nodes
around, and implements a config node iterator in config.c. config_node_t
is just a typedef to nvlist_t but could be an opaque pointer in the future.