Cache VMs for a short time in LB.listEndpoints()

The VM list call can be very slow in some regions and it is called
by listEndpoints(). Since endpoints are often retrieved for many LBs
in sequence, this caching can dramatically improve performance. The
tradeoff is that new servers added to an LB may not appear in the
listEndpoints() results for up to a minute longer than usual.
throw CloudException instead InternalException when cannot GET cloud resources
added tests for CloudException on null stream in get method
Azure create VM endpoints through AzureIpAddressSupport.forward method