Note that atomicOp returns the new value, rather than the old value. Perhaps we could use some kind of atomicUnaryPre/atomicUnaryPost functions to allow code such as:

```D
if (atomicUnaryPre!"++"(var)) { }  // increment, then check if var is non-zero
if (atomicUnaryPost!"++"(var)) { }  // check if var was non-zero, then increment
```