Race Fix, 2nd attempt

This pull request subsumes #415.

Based on my new understanding from working on #415, I've come to the conclusion that `CommonReactiveSource` was introducing some hazards.  I've documented the problem on ff64268's description.

On my own code, I've implemented the policy that every observable property should be changed on the main thread (which I assume is what @paulcbetts suggested).  Using this new policy + this pull request, I haven't been able to create any concurrency problems yet.

(Ping @alanpog.)