Since FailFastError was just another `error`, all errors were technically `FailFastErrors`.
This code makes `FailFastError` a struct which implements the error interface, so that now errors can be distinctly identified as `FailFastError`'
Also added a unit test to prove that this works now.