Add HttpError, a subclass of JobError

Allows greater control of the error message, instead of cramming the
entire message into the JobError.message. HttpError also stores the http
error code, url and original raw response