text: Title: How to cleanly finish a Process with split-n-join tasks?
  Body: Say I have a Process which has two optional View tasks to the finish:
  
      --> Split --> optional_view_1 ---> Join ----> finish
             |                            ^
             |                            |
             -----> optional_view_2 -------
  
  Let's say both tasks are assigned, but a human logs in and completes optional_view_1. I want to ensure the Process finishes cleanly.
  
  AFAICS, the Process gets into a "stuck" state due to optional_view_2 at the Join. Is that correct? I tried cancelling optional_view_2, but that had no effect. I'm looking for a programmatic approach if that makes any difference. I'm aware of #93, and so I think my question boils down to:
  
  - how to finish the process cleanly (i.e. not cancel it) and without races
  - from where (e.g. from inside the Join or a Handler after each View to cancel the other one?)
  
  What is the correct procedure in this case? 