Fix race condition on teardowns
Fix race condition on teardowns

Summary:
Fix race conditions on `teardowns` in `FBFuture`.

This diff
1. wraps a mutable array of `FBFutureContext_Teardown *` into a new class - `FBFutureTeardowns` that provides threadsafety.
2. add synchronization for `nextContext`

NB. this ensures that there is no concurrent access to NSMutableArray, but does not guarantee the functional threadsafety. Will `-[FBFutureContext onQueue:push:]` yield an unexpected result if the `self.future` is resolved, and block is called synchronously so that `nextContext` is still nil?

Differential Revision: D23977351

fbshipit-source-id: ef7a167da0eaa37b41a5806bd832ae271d4786ef

facebook/FBSimulatorControl,facebook/FBSimulatorControl,facebook/FBSimulatorControl,facebook/FBSimulatorControl,facebook/FBSimulatorControl