Handling javaexceptions and avoiding obscure exceptions like "unable to get property xxx from null" when trying to access exchange.status

Exception-handling was fairly broken. Requests with malformed url's or unknown hosts returned an empty exchange-object which had no connection-property.
This caused exchange.status - which is a getter on exchange.connection.getResponseCode() - to throw an obscuring exception (Unable to get property from null).

A request which would result in an java-exception (MalformedUrl, UnknownHost, SocketTimeoutException...) will now return an exchange-object which has an additional property "exception" holding the java-exception.
The exchange-object's status-property will return 0 (zero) which is an invalid HTTP-Response and therefore indicating that something went wrong. This is derived from jquery which also returns 0 in such cases.
This aproach has been choosen to not break existing code - even if existing code would have failed when trying to access exchange.status or in some cases just by providing an error-/success-/complete-callback which also accessed exchange.status.

Please let me know if we want to merge this pull-request.