Improve the way to assert exceptions

This commit makes it possible to write things like this:

```java
assertThat((ExceptionalRunnable) () -> { 
    throw new IllegalArgumentException(); 
}).toThrow(IllegalArgumentException.class);
```

or on Java 7:

```java
assertThat(new ExceptionalRunnable() {
  @Override
  public void run() throws Exception {
    throw new IllegalArgumentException();
  }
}).toThrow(IllegalArgumentException.class);
```

instead of:

```java
try {
    throw new IllegalArgumentException();
    failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
} catch (IllegalArgumentException ignored) {}
```