Updated coroutine to manage state

Executing the coroutine returns a new coroutine context that allows for the coroutine's flow to be controlled via yield and resume. Every time you call the () operator a new coroutine will be created for the bound delegate. Renaming of these core classes is coming in the next commit to make it more clear on what is actually happening
Coroutine naming cleanup

Renamed coroutine_context to coroutine to clarify the use of the actual coroutine. Renamed coroutine to coroutine_delegate to clarify the use as a wrapper for a delegate that is resumable via the returned coroutine.