(#19409) Raise Puppet::Forge::Error::ForgeError on bad HTTP response from forge

When a bad HTTP response indicating an error, or an "error" string in the
response is received from the forge, raise Puppet::Forge::Errors::ForgeError
subclases rather than RuntimeErrors.

This allows the error to be caught by the module face and the error rendered
appropriately, i.e. as JSON if requested by the user.  Else fallback code for
unhandled exceptions is used, causing the exception to only be written via
logging.