Improve config_section base implementation

 - New macro _config_section_init to reduce code duplication.
 - New 'subsection' member of _config_section struct to keep track of
   hierarchy between sections. It is now necessary to pass the parent
   section as argument to the _new and _section_init functions.
 - We are now able to free all subsections and the actual struct on the
   base implementation, simplifying the specific implementations and
   saving some lines of code.
 - The same apply for the _set_defaults function, which is called for all
   subsections on the base implementation.
 - Protect against the case of specialized config_section implementation not
   providing the function in question.

Signed-off-by: Eduardo Lima (Etrunko) <eduardo.lima@intel.com>
Introduce struct _config_key

With this new struct we simplify the config_section implementation
and remove from it the responsibility for setting/getting values.

Signed-off-by: Eduardo Lima (Etrunko) <eduardo.lima@intel.com>