Operations can now:
1) return their progress directly.
2) throw an error.
3) (ADDED) return a promise:
+ that resolves to their progress.
+ that rejects an error message (like throwing but asynchronous).
For an example see the new operation "Wait" (Flow Control)
Added a flow control operation "Wait", which waits for the number of
milliseconds passed in as its argument. It is a fairly useless operation
but it does demonstrate how asynchronous operations now work.
A recipe like:
```
Fork
Wait (1000ms)
```
will only wait for 1000ms (each wait runs at the same time as each
other).
I have not looked into performance implications yet, also this code is
probably more complicated than it needs to be (would love help on this).