Overhaul error handling logic - Don't return errors at the `data` level from mutation validation errors, use top level errors instead. - Add error codes to all errors via the GrpahQL error extensions. Add settings for configuring them. - Change test client to support the new error handling.