:param m_args:   values to match args against
    :param m_kwargs: values to match kwargs against
    :param arg: args to match
    :param arg: kwargs to match

def args_match(m_args, m_kwargs, default, *args, **kwargs):
    """
    :param m_args:   values to match args against
    :param m_kwargs: values to match kwargs against
    :param arg: args to match
    :param arg: kwargs to match
    """
    if len(m_args) > len(args):
        return False
    for m_arg, arg in zip(m_args, args):
        matches = arg_match(m_arg, arg, eq)
        if not matches or matches is InvalidArg:
            return False  # bail out

    if m_kwargs:
        for name, m_arg in m_kwargs.items():
            name, comparator = arg_comparitor(name)
            arg = kwargs.get(name)
            if not arg_match(m_arg, arg, comparator, default):
                return False  # bail out
    return True