Spawn a new agent in a slave environment.

        :param str agent_cls:
            `qualname`` of the agent class.
            That is, the name should be in the form ``pkg.mod:cls``, e.g.
            ``creamas.core.agent:CreativeAgent``.
        :param str addr:
            Optional. Address for the slave enviroment's manager.
            If :attr:`addr` is None, spawns the agent in the slave environment
            with currently smallest number of agents.

        :returns: :class:`aiomas.rpc.Proxy` and address for the created agent.

        The ``*args`` and ``**kwargs`` are passed down to the agent's
        :meth:`__init__`.

        .. note::

            Use :meth:`~creamas.mp.MultiEnvironment.spawn_n` to spawn large
            number of agents with identical initialization parameters.

async def spawn(self, agent_cls, *args, addr=None, **kwargs):
        """Spawn a new agent in a slave environment.

        :param str agent_cls:
            `qualname`` of the agent class.
            That is, the name should be in the form ``pkg.mod:cls``, e.g.
            ``creamas.core.agent:CreativeAgent``.
        :param str addr:
            Optional. Address for the slave enviroment's manager.
            If :attr:`addr` is None, spawns the agent in the slave environment
            with currently smallest number of agents.

        :returns: :class:`aiomas.rpc.Proxy` and address for the created agent.

        The ``*args`` and ``**kwargs`` are passed down to the agent's
        :meth:`__init__`.

        .. note::

            Use :meth:`~creamas.mp.MultiEnvironment.spawn_n` to spawn large
            number of agents with identical initialization parameters.
        """
        if addr is None:
            addr = await self._get_smallest_env()
        r_manager = await self.env.connect(addr)
        return await r_manager.spawn(agent_cls, *args, **kwargs)