Use a mutable set for -rac_addDeallocDisposable:

It's synchronized anyways, and the speedup is ridiculous.
Only need to replace the associated object if the set is new
Use compare-and-swap instead of a mutex in RACDisposable
Simplify RACScopedDisposable
Use a non-recursive lock in RACCompoundDisposable and hold it less

Also make the 'disposables' property mutable, so that we can replace it without needing to copy the whole array.
Merge branch 'mutable-dealloc-disposables' into disposable-optimization
Merge branch 'bounded-compound-disposables' into disposable-optimization
Use a spin lock in RACCompoundDisposable

Contention should be fairly low -- perhaps still a bit high for a spin lock, but this avoids a lot of unnecessary object allocations.
Actually, we can even use an array here instead of a set
Merge branch 'master' into disposable-optimization
Merge pull request #278 from github/disposable-optimization

Optimize disposables