Perform dotted key lookups and keep track of where we are.

def _dotted_get(self, dotted_key, default=None, **kwargs):
        """
        Perform dotted key lookups and keep track of where we are.
        """
        split_key = dotted_key.split(".")
        name, keys = split_key[0], split_key[1:]
        result = self.get(name, default=default, **kwargs)
        self._memoized = result

        # If we've reached the end, then return result and clear the
        # memoized data.
        if not keys or result is default:
            self._memoized = None
            return result

        # If we've still got key elements to traverse, let's do that.
        return self._dotted_get(".".join(keys), default=default, **kwargs)