ndn.cxx: Expressing interests and publishing data use event scheduling, instead of directly calling the callback

Also in this commit is extension, allowing expression of multiple
interests for the same name with different callbacks.  For example, if
user expresses two exactly the same interests, when data arrives or
interest times out, callbacks from the individual call will be invoked.

Another small change is that if interest is "collapsed" in ApiFace, it
is not further propagated to the NDN stack.
diff --git a/ndn.cxx/detail/timeouts-policy.h b/ndn.cxx/detail/timeouts-policy.h
index 3a52aa2..7d94be1 100644
--- a/ndn.cxx/detail/timeouts-policy.h
+++ b/ndn.cxx/detail/timeouts-policy.h
@@ -147,8 +147,7 @@
       inline void
       ProcessTimeoutEntry (typename parent_trie::iterator item)
       {
-        if (!item->payload ()->m_timeoutCallback.IsNull ())
-          item->payload ()->m_timeoutCallback (item->payload ()->GetInterest ());
+        item->payload ()->ProcessOnTimeout (item->payload ()->GetInterest ());
 
         m_base.erase (item);
       }