Catch exceptions in test functions.

Initially, I just wanted to mark a test as failed when it throws an exception. I thought this would be a simple change... but then I realized that smell-spec called the same test multiple times (once for generating dots, once for generating messages). Given that tests might have side effects, this shouldn't be the case.

This is why I refactored the code quite a bit. The new version is a bit shorter than the original.

I'm looking forward to your comments!

PS: Thanks for smell-spec, I really like it!