Fixed race condition in -[TCS task]

The method -task in TaskCompletionSource is not thread safe.

Here's a situation that I've seen:

  - (void)method {
    TaskCompletionSource *ts = [TaskCompletionSource new];
    dispatch_async(q, ^(void) {
      [ts completeWithValue:nil];
    });
    return [ts task];
  }

Occasionally the lines [ts completeWithValue:nil] and [ts task]
execute at the same time and two tasks are created. This patch
fixes the problem by moving task creation to the -init method.
Fixed race condition in @synchronizing on _callbacks

Synchronize on the _callbacks ivar only because the methods
that mutate _callbacks also mutates _errbacks (and _finallys).
Conveniences for completed: and failed: