Finalizing implementation of almost all events for forwarding strategy.
Implementing FwStats strategy that just calculates statistics for
pit entries and incoming/outgoing interests.

A serious testing is necessary to see if everything works.
diff --git a/model/forwarding-strategy/ccnx-forwarding-strategy.h b/model/forwarding-strategy/ccnx-forwarding-strategy.h
index 0683079..c46c70f 100644
--- a/model/forwarding-strategy/ccnx-forwarding-strategy.h
+++ b/model/forwarding-strategy/ccnx-forwarding-strategy.h
@@ -80,7 +80,10 @@
           Ptr<CcnxContentObjectHeader> &header,
           Ptr<Packet> &payload,
           const Ptr<const Packet> &packet);
-    
+
+  virtual void
+  WillErasePendingInterest (Ptr<CcnxPitEntry> pitEntry);
+  
 protected:
   // events
   virtual void
@@ -110,7 +113,8 @@
   DetectRetransmittedInterest (const Ptr<CcnxFace> &incomingFace,
                                Ptr<CcnxPitEntry> pitEntry);
 
-  // only for data received from network
+  // makes sense only for data received from network
+  // When Interest is satisfied from the cache, incoming face is 0
   virtual void
   WillSatisfyPendingInterest (const Ptr<CcnxFace> &incomingFace,
                               Ptr<CcnxPitEntry> pitEntry);
@@ -132,10 +136,28 @@
   ShouldSuppressIncomingInterest (const Ptr<CcnxFace> &incomingFace,
                                   Ptr<CcnxPitEntry> pitEntry);
 
+  /**
+   * @brief Event fired before actually sending out an interest
+   *
+   * If event returns false, then there is some kind of a problem (e.g., per-face limit reached)
+   */
+  virtual bool
+  WillSendOutInterest (const Ptr<CcnxFace> &outgoingFace,
+                       Ptr<CcnxInterestHeader> header,
+                       Ptr<CcnxPitEntry> pitEntry);
+
+  /**
+   * @brief Event fired just after sending out an interest
+   */
+  virtual void
+  DidSendOutInterest (const Ptr<CcnxFace> &outgoingFace,
+                       Ptr<CcnxInterestHeader> header,
+                       Ptr<CcnxPitEntry> pitEntry);
+  
 
   virtual void
   PropagateInterest (const Ptr<CcnxFace> &incomingFace,
-                     Ptr<CcnxInterestHeader> &header,
+                     Ptr<CcnxInterestHeader> header,
                      const Ptr<const Packet> &packet,
                      Ptr<CcnxPitEntry> pitEntry);
   
@@ -152,7 +174,7 @@
    */
   virtual bool
   DoPropagateInterest (const Ptr<CcnxFace> &incomingFace,
-                       Ptr<CcnxInterestHeader> &header,
+                       Ptr<CcnxInterestHeader> header,
                        const Ptr<const Packet> &packet,
                        Ptr<CcnxPitEntry> pitEntry) = 0;