fix error handling in ClientErrorHandler

The ClientErrorInterceptors are designed to handle error responses from the server (non 200 response code). However, some exceptions can occur that are not failures returned from the server but failure to process the response on the client side such as json parsing exceptions etc. Instead of trying to pass those exceptions to the ClientErrorInterceptors, we check the type of the Exception and only pass it along if it can be expected to be handled by the ClientErrorInterceptors. If not, then we simply rethrow the exception.