Accounts for situations where the result isn't a monad but a string instead. This provides more flexibility for simple single message failures.
Milestone: patch
Cleans up the error objects so they are in the same namespace for quick lookup. This includes renaming `ProblemDetail` as `Problem` and using `petail` for `Petail` to clarify the differences.
Milestone: patch