Proxy support

Hi

To access the urbanairship service we are required to call over a http proxy. We have therefore added proxy support to the APIClient.

It works so that if a proxy has been set by the caller, it is used and if proxy authentication has been set, it is used. We use both no-authentication and NTCredentials style authentication for NTLM based proxy.

Since the information required for proxy authentication varies (username+password or username+password+workstationname+domain), we have opted to expose the credentials type to the client, so that the caller creates the credentials object and passes that via setProxyCredentials(). Similarly the hostname+port number of the proxy are also passed via a HttpHost object.

Please consider this for inclusion in the urbanairship java library.

Thanks,

/Allan
Let's use google.Commons.Optional<ProxyInfo> for this, where ProxyInfo is a class that has getters for proxyhost and proxycredentials.  We can then use Optional.isPresent() in provisionRequest() and provisionExcutor() to see whether we need to act on it.