Async notification

Allow creation of deferred notification. Deferred notification will be triggered in a timeout of 0 (after current thread ends). This allow the controller to call `notification.clearQueue()` to empty the queue of deferred notification. `notification.flushQueue()` would display all the deferred notifications.