Java exception hierarchy for API errors

* Introduce package com.dnanexus.exception with all the API error subtypes.
* DXHTTPRequest.request is changed to throw more specific exception classes (DXAPIException, IOException, InterruptedException). Improve control flow a bit too.

@kislyuk @kjlai