store self pointer in CURLOPT_PRIVATE so that we can turn an easy handle back into an object
Rewrote the shutdown/cleanup process to hopefully be tidier and safer. The multi property is now atomic, and should be the only thing used anywhere to indicate that the multi is being shut down. Most of the shutdown happens asynchronously on the queue. We now don't attempt to shutdown again in dealloc, instead we assert to check that shutdown was called properly before dealloc. Since various blocks hold a reference to self, this should always be true - dealloc should only get hit when the timers/queues/etc are gone.