Keep details of original errors where possible

Instead of raising a new error with the same code as the original, re raise the original error keeping all of its details in tact.
Add inheritance layer to specific http error types

Rather than forcing specific applications to handle error codes and translate these to meaningful HTTP error types. Let gds-api-adapters handle raising errors of specific types instead. This will DRY up our code elsewhere and allow us to handle these specific error types more easily.

This change should be transparent to other applications as this is only an extra layer of inheritance to the inheritance chain. All errors will still be a subclass of the HTTPErrorResponse type but will be more specific to the HTTP response code ranges.