## Problem
Currently, even if `LAMBDA_REMOTE_DOCKER=1`, we unzip the zip files in the directory they are in, which is usually /var/lib/localstack, which usually has a bind mount to the host.
On docker desktop, due to the use of grpc-FUSE (on macos), this can be very slow, about 200 times slower than on volumes / directly on the host. With experimental virtio filesystem enabled (also on macos), this can be reduced to about 30 times as slow, but still problematic.
This means a lambda may take a lot of time processing, for each additional layer some more. This especially affects nodejs lambdas with huge node_modules folders.

## Probable solution
At least if `LAMBDA_REMOTE_DOCKER=1`, we should leave the initial zip files on the bind mount (for persistence etc), but the working directories after unzipping should be located on non-bind mounts, to speed up the IO for unzipping.
self,
        lambda_function: LambdaFunction,
        lambda_docker_ip: Optional[str] = None,
        check_port: bool = False,
    ) -> bool:
        """Return whether to use stay-open execution mode - if we're running in Docker, the given IP
        is defined, and if the target API endpoint is available (optionally, if check_port is True)."""
        if not lambda_docker_ip:
            func_arn = lambda_function.arn()
            container_name = self.get_container_name(func_arn)
            lambda_docker_ip = DOCKER_CLIENT.get_container_ip(container_name_or_id=container_name)
        should_use = lambda_docker_ip and config.LAMBDA_STAY_OPEN_MODE
        if not should_use or not check_port:
            return should_use
        full_url = self._get_lambda_stay_open_url(lambda_docker_ip)
        return is_port_open(full_url)
    def _get_lambda_stay_open_url(self, lambda_docker_ip: str) -> str:
        return f"http://{lambda_docker_ip}:{STAY_OPEN_API_PORT}"
    def _execute(self, func_arn: str, *args, **kwargs) -> InvocationResult:
        if not LAMBDA_CONCURRENCY_LOCK.get(func_arn):
            concurrency_lock = threading.RLock()
            LAMBDA_CONCURRENCY_LOCK[func_arn] = concurrency_lock
        with LAMBDA_CONCURRENCY_LOCK[func_arn]:
            return super(LambdaExecutorReuseContainers, self)._execute(func_arn, *args, **kwargs)
    def startup(self):
        self.cleanup()
        
        if config.LAMBDA_REMOVE_CONTAINERS:
            self.start_idle_container_destroyer_interval()
    def cleanup(self, arn: str = None):