def split_args(self, arg_dict):
        """
        given a dictionary of arguments, split them into
        args and kwargs

        note: this destroys the arg_dict passed. if you need it,
        create a copy first.
        """
        pos_args = []
        for arg in self.args:
            pos_args.append(arg_dict[arg.name])
            del arg_dict[arg.name]
        return pos_args, arg_dict
given a dictionary of arguments, split them into
        args and kwargs

        note: this destroys the arg_dict passed. if you need it,
        create a copy first.