Fix invoke and hookFor

This branch is based on top of #602 and aim at fixing #661 

Right now I fix `invoke` and `hookFor` based on the old behavior. But I realized even this way, `hookFor` is still hacky-ish as it doesn't mind of any flow control and it doesn't give any feedback as to when a generator is done running. I believe `hookFor` should be updated to embrace the `composeWith` and runLoop philosophy.