Refactor cache decorator to only accept coroutines and coalesce
Refactor cache decorator to only accept coroutines and coalesce

This changes a few things:

* Only accepts coroutines now
* If called multiple times and the previous run takes too long,
  then the second invocation will return the cached value rather
  than invoking the coroutine twice. This is called coalescing
* Return asyncio.Task instead of coroutine objects

Rapptz/RoboDanny