Retrieve a value from its key.

        Retrieval steps are:
        1) Normalize the key
        2) For each option group:
           a) Retrieve the value at that key
           b) If no value exists, continue
           c) If the value is an instance of 'Default', continue
           d) Otherwise, return the value
        3) If no option had a non-default value for the key, return the
            first Default() option for the key (or :arg:`default`).

def get(self, key, default=NoDefault):
        """Retrieve a value from its key.

        Retrieval steps are:
        1) Normalize the key
        2) For each option group:
           a) Retrieve the value at that key
           b) If no value exists, continue
           c) If the value is an instance of 'Default', continue
           d) Otherwise, return the value
        3) If no option had a non-default value for the key, return the
            first Default() option for the key (or :arg:`default`).
        """
        key = normalize_key(key)
        if default is NoDefault:
            defaults = []
        else:
            defaults = [default]

        for options in self.options:
            try:
                value = options[key]
            except KeyError:
                continue

            if isinstance(value, Default):
                defaults.append(value.value)
                continue
            else:
                return value

        if defaults:
            return defaults[0]

        return NoDefault