fail now ensures every assertion fails.
In a fail block with multiple assertions only one had to fail to pass. Which means some tests could pass and this would not raise an error. Now wrap every assertion in a fail with a check to ensure each fails.
Note: This is not possible with mocks and provided. Provided has to catch exceptions from functions being called not as intended. Which means wrapping asserts prevents provided catching the errors.