Make `DefaultsError` a real `Error` object

This is really important in order for it to show up properly in lots of debugging logs and so that it gets a stack trace (otherwise it's very difficult to find out where it was originally thrown).