Add assertions on logged exceptions

## Context
`ListAppender` class didn't provide a way to assert on logged exceptions.

## Description
Add `assertHasLog(LogEntryMatcher, Count)` method to `ListAppender` class in order to assert there is exactly a number of logs with a given exception (class + message).

## Examples of usage of the `ListAppender` class : 
- same message logged 2 times
`ListAppender appender = ....`
`Logger logger = Logger.getLogger(getClass())`
`logger.error("Something wrong has happened", new Exception("message1"));`
`logger.error("An error has happened", new Exception("message1"));`
`appender.assertHasLog(new LogEntryMatcher(Exception.class, "message1"), Count.count(2)); // success`

- root cause chained with another exception
`ListAppender appender = ....`
`Logger logger = Logger.getLogger(getClass())`
`Exception rootCause = new Exception("message1");`
`logger.error("Something wrong has happened", new Exception("message2", rootCause));`
`appender.assertHasLog(new LogEntryMatcher(Exception.class, "message1"), Count.count(1)); // success`

- message never logged
`ListAppender appender = ....`
`Logger logger = Logger.getLogger(getClass())`
`logger.error("Something wrong has happened", new Exception("message1"));`
`appender.assertHasLog(new LogEntryMatcher(Exception.class, "message1"), Count.none()); // failure`

- message logged with wrong exception class
`ListAppender appender = ....`
`Logger logger = Logger.getLogger(getClass())`
`logger.error("Something wrong has happened", new NullPointerException("the parameter is null"));`
`appender.assertHasLog(new LogEntryMatcher(Exception.class, "the parameter is null"), Count.count(1)); // failure`