Takes the loaded config values (from YAML files) and performs the
        following clean up steps:
        
        1. remove all value keys that are not uppercase
        2. resolve any keys with missing values

        Note: resolving missing values does not fail fast, we will collect
        all missing values and report it to a post handler, then finally fail.

        @param values dictionary of raw, newly loaded config values

def process_loaded_configs(self, values):
        """Takes the loaded config values (from YAML files) and performs the
        following clean up steps:
        
        1. remove all value keys that are not uppercase
        2. resolve any keys with missing values

        Note: resolving missing values does not fail fast, we will collect
        all missing values and report it to a post handler, then finally fail.

        @param values dictionary of raw, newly loaded config values
        """
        unresolved_value_keys = self._process_config_values([], values, [])
        if len(unresolved_value_keys) > 0:
            msg = "Unresolved values for: {}".format(unresolved_value_keys)
            # Even though we will fail, there might be a situation when we want to 
            # do something with the list of missing values, so pass it to a handler.
            self.on_process_loaded_configs_failure(values, unresolved_value_keys)
            if self.ignore_errors:
                # If we're ignoring errors, at least log it
                logging.warn(msg)
            else:
                # end program
                raise LookupError(msg)

        # All the config values were checked and everything looks good, 
        # let's inform post handler for any additional work.
        self.on_process_loaded_configs_complete(values)
        
        return values