add ScheduleRun in NE

-- DataManagement Update Server needs to send notify to client when
  subscription is there. In order to decrease the stack depth, add
  ScheduleRun in NotificationEngine to achieve async notificaiton
  engine run.
diff --git a/src/lib/profiles/data-management/Current/NotificationEngine.cpp b/src/lib/profiles/data-management/Current/NotificationEngine.cpp
index 0f837c4..7ada8ce 100644
--- a/src/lib/profiles/data-management/Current/NotificationEngine.cpp
+++ b/src/lib/profiles/data-management/Current/NotificationEngine.cpp
@@ -1,6 +1,7 @@
 /*
  *
- *    Copyright (c) 2016-2017 Nest Labs, Inc.
+ *    Copyright (c) 2016-2018 Nest Labs, Inc.
+ *    Copyright (c) 2019 Google, LLC.
  *    All rights reserved.
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
@@ -1701,6 +1702,17 @@
 
 #endif // WDM_ENABLE_SUBSCRIPTIONLESS_NOTIFICATION
 
+void NotificationEngine::Run(System::Layer * aSystemLayer, void * aAppState, System::Error)
+{
+    NotificationEngine * const pEngine = reinterpret_cast<NotificationEngine *>(aAppState);
+    pEngine->Run();
+}
+
+void NotificationEngine::ScheduleRun()
+{
+    SubscriptionEngine::GetInstance()->GetExchangeManager()->MessageLayer->SystemLayer->ScheduleWork(Run, this);
+}
+
 void NotificationEngine::Run()
 {
     WEAVE_ERROR err                  = WEAVE_NO_ERROR;
diff --git a/src/lib/profiles/data-management/Current/NotificationEngine.h b/src/lib/profiles/data-management/Current/NotificationEngine.h
index 00ac3f7..792b89a 100644
--- a/src/lib/profiles/data-management/Current/NotificationEngine.h
+++ b/src/lib/profiles/data-management/Current/NotificationEngine.h
@@ -1,6 +1,7 @@
 /*
  *
- *    Copyright (c) 2016-2017 Nest Labs, Inc.
+ *    Copyright (c) 2016-2018 Nest Labs, Inc.
+ *    Copyright (c) 2019 Google, LLC.
  *    All rights reserved.
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
@@ -115,6 +116,11 @@
     void Run(void);
 
     /**
+     * Main work-horse function that executes the run-loop asynchronously on the Weave thread
+     */
+    void ScheduleRun(void);
+
+    /**
      * Marks a handle associated with a data source as being dirty.
      *
      * @retval #WEAVE_NO_ERROR On success.
@@ -394,6 +400,8 @@
 
     WEAVE_ERROR SendNotifyRequest();
 
+    static void Run(System::Layer * aSystemLayer, void * aAppState, System::Error);
+
 #if WDM_ENABLE_SUBSCRIPTIONLESS_NOTIFICATION
     WEAVE_ERROR BuildSubscriptionlessNotification(PacketBuffer *msgBuf, uint32_t maxPayloadSize, TraitPath *aPathList,
                                                   uint16_t aPathListSize);