Rewrote MultiCurl to be concurrent and async

Hi,

The MultiCurl client had a bug where it would hang for ever on new versions. See this comment for an explanation (I think): http://www.php.net/manual/en/function.curl-multi-select.php#110869

In any case, I wanted to be able to process responses as they come back, rather than block for the entire batch to complete. I have therefore rewritten the client completely. It is still fully BC, but you can now pass a callback option that will get invoked as the response becomes available. This changes the interface a bit, since the user land code will then have to call `proceed` to delegate control back to multi-curl, concurrent style.

Sorry for the missing tests, but then there weren't any on the original code either.