It was my understanding that implementing "trampolining" as explained by http://dabeaz.com/coroutines/ in Python 2.5 is basically what "yield from" does in Python 3.3. Maybe "yield from" is more efficient. If anyone has any comments on that I'd be interested.
The PIL book has a few interesting examples of things that you can do with coroutines that are not possible with generators (plain yield). Also there is a paper by the Lua authors called "revisiting coroutines" -- although that was published in 2009, they don't acknowledge that Python has coroutines! They talk about Python's "limited" generators.
EDIT: Sorry, "yield from" is for generators. So coroutines are yield/send(). Generators are yield/yield from.
"yield from" is indeed the equivalent of coroutine trampolines, but for generators.
The right way to think about it is that coroutines are a push-based model while generators are a pull-based model. They don't mix, despite using the same keyword! If you want to mix them you would have to introduce a buffer between them or something. This is somewhat explained in Beazley's material.
And coroutines are more powerful than generators, as explained by the "revisiting coroutines" paper (and which should be obvious if you try to transcribe some coroutine patterns into generators.) Even after adding "yield from", which removed one restriction of generators, coroutines are still more powerful.