Throw correct exception

Was accidentally throwing the Guzzle\ServerErrorResponseException,
instead of the Elasticsearch\ServerErrorResponseException.  Was
not readily apparent since ServerErrorResponseException are usually
handled by the user anyway
Fix retry logic

Retry logic was previously broken (e.g. would retry forever).  Was
not apparent because of GuzzleConnection throwing a Guzzle\ServerErrorResponseException
instead of Elasticsearch\ServerErrorResponseException, meaning
no retry would happen due to not catching the exception.

Once the exception was fixed, the client can get into infinite
retry loops and eventually hit the recursive function limit.

Adds logic to retry, and retries is set to # of connections.
Can be overridden using $params['retries'] option.
Make Auth test less Guzzle-specific

Previous test relied on Guzzle-specific formatting.  This loosens
the test to be useful for non-Guzzle clients.
Bring CurlMultiConnection up-to-date

Big refactor to bring CurlMultiConnection up to date with the
GuzzleConnection class.  Throws appropriate exceptions, passes
yaml test suite.

Still not recommended for general use, but may be useful for
situations which require low-latency initialization, such as
autocomplete.