forcing + sync

How to make sure that an expression that needs an update won't get
updated twice by two different threads? Let's do this for
force-dynamic instead of force.
A node can be in these states:
* not accessed
* cache check
* cache update
It's probably simplest to use a semaphore for this. syn