Add support for RMW in C, as atomic_exchange.

Numerous changes, because RMW are both reads and writes, which the
infrastructure did not really handle. Some points.

- The predicates is_write /is_load now return true on RMW.

- value_of (Actions.mli) is deprecated in favor of read_of written_of,
  as RMW hold two values.

- fr/rf can now potentially relate the same event. Disallowed from the
  start for simplicity (cpp11.cat can probably accept the former and
  reject teh second.

- As RMW accept all memory orders, we now allow all memory_order specifications
  for communication. diy then simply fails on store/loads with incorrect
  memory_order specifications.
Merge branch 'master' of github.com:herd/herdtools