set(self, section, option, value = None, title = None, validate = lambda value: None, help = '', control = None, args = [], kwargs = {}, include = True)
  Store the value to the configuration with all it's associated data.
  
  * title is the friendly name for the value (will be used for textual labels etc).
  * validate is a lambda which will be called by ConfigFrame.onOk when checking all the values. Should return None if the value is ok, or an error message as a string.
  * help is the help message which will be tacked onto the control in the GUI.
  * control is the control which will be used in the GUI.
  * args is the arguments that will be passed to the control in addition to the ones needed by ConfFrame.
  * kwargs is the keyword arguments which will be passed to the control when it's created by self.get_gui.
  * include tells the GUI whether or not to include this value in the resulting configuration screens.
  
  Also alerts of a change, using self.updateFunc.

def set(self, section, option, value = None, title = None, validate = None, help = None, control = None, args = None, kwargs = None, include = None):
  """
  set(self, section, option, value = None, title = None, validate = lambda value: None, help = '', control = None, args = [], kwargs = {}, include = True)
  Store the value to the configuration with all it's associated data.
  
  * title is the friendly name for the value (will be used for textual labels etc).
  * validate is a lambda which will be called by ConfigFrame.onOk when checking all the values. Should return None if the value is ok, or an error message as a string.
  * help is the help message which will be tacked onto the control in the GUI.
  * control is the control which will be used in the GUI.
  * args is the arguments that will be passed to the control in addition to the ones needed by ConfFrame.
  * kwargs is the keyword arguments which will be passed to the control when it's created by self.get_gui.
  * include tells the GUI whether or not to include this value in the resulting configuration screens.
  
  Also alerts of a change, using self.updateFunc.
  
  """
  if self.has_option(section, option):
   oldValue = self.get(section, option) # Store for comparison.
   v = self.config[section][option] # Don't alter anything but the value.
  else:
   oldValue = value # It's new, don't alert.
   v = {} # The entry for self.config[section][value].
  if title != None:
   v['title'] = title
  else:
   v['title'] = v.get('title', option.title()) # Set default capitalised title
  if help != None:
   v['help'] = help
  else:
   v['help'] = v.get('help', '')
  if validate != None:
   v['validate'] = validate
  else:
   v['validate'] = v.get('validate', lambda value: None)
  if control != None:
   v['control'] = control
  else:
   ctrl = None
   for x, y in self.control_types.items():
    if issubclass(type(value), x):
     ctrl = y
     break
   else:
    raise TypeError('No control provided, and none found for type of value: %s.' % repr(value))
   v['control'] = v.get('control', ctrl)
  if args != None:
   v['args'] = args
  else:
   v['args'] = v.get('args', [])
  if kwargs != None:
   v['kwargs'] = kwargs
  else:
   v['kwargs'] = v.get('kwargs', {})
  if include != None:
   v['include'] = include
  else:
   v['include'] = v.get('include', True)
  v['value'] = value
  # Add everything to self.config:
  self.config[section][option] = v
  if value != oldValue: # Then call self.updateFunc
   self.updateFunc(self, section, option, value)