def rename!(old_path, target_path)
      old_path    = "root.#{old_path}" unless old_path.include? 'root.'
      target_path = "root.#{target_path}" unless target_path.include? 'root.'

      unless _option = root.get_path(target_path)
        raise OptionNotExist, "option #{target_path} does not exist -  target path must exist for rename."
      end

      _parent, _name = old_path.option_path_split
      _section = root.get_path(_parent)

      renamed_option = RenamedOption.new(_name, _section, _option)

      begin
        _section.add_option(_name, renamed_option)
      rescue OptionExists => e
        raise RenameFailed, "Unable to rename #{old_path} -> #{target_path}"
      end
    end
def rename!(old_path, target_path)
      old_path    = "root.#{old_path}" unless old_path.include? 'root.'
      target_path = "root.#{target_path}" unless target_path.include? 'root.'

      unless _option = root.get_path(target_path)
        raise OptionNotExist, "option #{target_path} does not exist -  target path must exist for rename."
      end

      _parent, _name = old_path.option_path_split
      _section = root.get_path(_parent)

      renamed_option = RenamedOption.new(_name, _section, _option)

      begin
        _section.add_option(_name, renamed_option)
      rescue OptionExists => e
        raise RenameFailed, "Unable to rename #{old_path} -> #{target_path}"
      end
    end
like alias but with reversed arguments and a warning on assignment
 note: new path must already exist. old_path is created as an alias
 to new_path.