Added a hook on SLTest for when exceptions are thrown.

We'd like to display some more debugging information about a test failure when it happens, so we've added a hook to support this.
This is a great direction for refactoring `SLTest` and I wonder if we couldn't go even a bit further. What if, rather than tracking the last failure (==exception), `SLTest` had a `testCaseState` property:

```objc
// just internal to SLTest
@interface SLTestCaseState: NSObject

@property (nonatomic, readonly) BOOL failed;
@property (nonatomic, readonly) BOOL failureWasExpected;

/**
 Sets the properties above, from the failure's description.
 Idempotent, so this can be called multiple times without overwriting `failureWasExpected`. 
 */
- (void)recordFailure:(SLTestCaseFailure *)failure;

@end
```

Then we could get rid of this variable and the tricky ordering in the catch block below.
We also wouldn't have to worry about overwriting `testCaseExceptionInfo` in our exception handler--we actually don't need to hold onto all the exceptions and this would clarify that.