Refactor -invalidateGlobalRefIfNoNewSubscribersShowUp

Specifically, avoid block allocations (by avoiding variable capture), and only check RACActiveSignals once per run loop iteration.
Don't allocate RACSignal->_subscribers until needed
Avoid -tupleByAddingObject: in zip/combine

This reduces the number of allocations performed as the number of streams grows.
Factor out +zip: and +combineLatest: logic into 1 method
Manage active signals in a lock-free way
Remove temporary arrays and modify RACActiveSignals directly
Document thread requirements for RACActiveSignals
Reinstate comment about signal lifetime
Add RACSerialDisposable
Refactor __block disposables to be RACSerialDisposables
Actually, these don't really need to be atomic swaps
Merge pull request #703 from ReactiveCocoa/lock-free-active-signals

Lock free management of active signals
Merge pull request #699 from ReactiveCocoa/optimizations

Reduce memory consumption, optimize zipping/combining
Merge branch 'master' into 2.0-development

Conflicts:
	ReactiveCocoaFramework/ReactiveCocoa/RACStream.m
Remove erroneous disposal in -dealloc
Merge pull request #704 from ReactiveCocoa/serial-disposable

Add RACSerialDisposable
Merge remote-tracking branch 'origin/2.0-development' into prepare-for-reuse-signal

Conflicts:
	ReactiveCocoaFramework/ReactiveCocoa.xcodeproj/project.pbxproj