Refactored Events to send using a Coroutine

* Added a `Singleton` class to easily create `MonoBehaviour` singletons
* `CoroutineDispatcher` singleton that exposes
`StartCoroutine(IEnumerator)` to non-MonoBehaviour objects
* `Events` now uses the `CoroutineDispatcher` to send events more
efficiently
* `DraggedItem` has been updated to use the `Singleton` class