more robust error handling

fixes `Generator is already running` errors, specifically #48. it also assumes asserts that `done` is well-defined - users may not pass callbacks for whatever reason. most likely fixes errors i've been seeing in koa and stuff.

you probably want to fiddle with it a little bit. i'm pretty sure performance is going to go way down.