Refactored co-routines so that AbstractCoroutine does all the heavy lifting.

* Cancelling a suspended co-routine no longer sends an exception to the
cancelled co-routine. Instead, the suspended co-routine is simply destroyed and
the parent is sent a `CancelException` (fixes #12).
* Exceptions are now propagated to the parent node using `enqueue()`
* Exceptions that are thrown while adapting yielded values into nodes are now
sent back to the current co-routine (fixes #14).
* `SuspendPrimitive` now detaches itself before invoking the resumer callback
* `RootNode` now captures and ignores CancelException from children