ALL args must not raise an exception when called incrementally.
    If an exception is specified, raise it, otherwise raise the callable's exception.


    :params iterable[Certifier] args:
        The certifiers to call
    :param callable kwargs['exc']:
        Callable that excepts the unexpectedly raised exception as argument and return an
        exception to raise.
    :raises CertifierError:
        The first certifier error if at least one raises a certifier error.

def AND(*args, **kwargs):
    """
    ALL args must not raise an exception when called incrementally.
    If an exception is specified, raise it, otherwise raise the callable's exception.


    :params iterable[Certifier] args:
        The certifiers to call
    :param callable kwargs['exc']:
        Callable that excepts the unexpectedly raised exception as argument and return an
        exception to raise.
    :raises CertifierError:
        The first certifier error if at least one raises a certifier error.
    """
    for arg in args:
        try:
            arg()
        except CertifierError as e:
            exc = kwargs.get('exc', None)
            if exc is not None:
                raise exc(e)
            raise