Registers a callable with the specified key and type info.

            `key`
                String key to identify a callable.
            `value`
                Callable object.
            `type_info`
                Dictionary with type information about the value provided.

def register(self, key, value, type_info):
        """ Registers a callable with the specified key and type info.

            `key`
                String key to identify a callable.
            `value`
                Callable object.
            `type_info`
                Dictionary with type information about the value provided.
            """

        # check for existing action
        old_action = self._actions.get(key)

        # update existing type info if value hasn't changed
        if old_action == value and key in self._type_info:
            self._type_info[key].update(type_info)
        else:
            self._type_info[key] = dict(type_info)

        super(ExtRegistry, self).register(key, value)