(internal) inject/replace all functions into a rpyc connection object.

def _inject(self, conn):
        """
        (internal) inject/replace all functions into a rpyc connection object.
        
        """
        # provide PAPY_DEFAULTS remotely
        # provide PAPY_RUNTIME remotely
        if not 'PAPY_INJECTED' in conn.namespace:
            _inject_func(get_defaults, conn)
            _inject_func(get_runtime, conn)
            conn.execute('PAPY_DEFAULTS = get_defaults()')
            conn.execute('PAPY_RUNTIME = get_runtime()')
            conn.execute('PAPY_INJECTED = True')
        # inject all functions
        for func in self.task:
            _inject_func(func, conn)
        # create list of functions called TASK
        # and inject a function comp_task which 
        _inject_func(_comp_task, conn)
        conn.execute('TASK = %s' % \
                   str(tuple([i.__name__ for i in self.task])).replace("'", ""))
                    # ['func1', 'func2'] -> "(func1, func2)"
        # inject compose function, will ...
        self.task = [conn.namespace['_comp_task']]
        self.args = [[self.args]]
        self.kwargs = [{'kwargs':self.kwargs}]
        # instead of multiple remote back and the combined functions is
        # evaluated remotely.
        return self