face+management: Removing ndnd::Controller and re-designing controllers

As of this commit, there is only one controller: nfd::Controller.
Legacy ndnd-tlv is no longer supported, but it is still possible to use
NFD FIB Management directly (RIB Management commands are used by
default).  To request direct FIB management, one needs to call
Face::setDirectFibManagement(true) or configure protocol variable in the
config file.

Instead of using virtual methods of the controllers, a special
setInterestFilterImpl method will select proper prefix registration
method.  In addition to that, setInterestFilterImpl will also remember
how exactly the prefix should be de-registered, including security
parameters.

Change-Id: If9d4c7e87f6d80b6cb766a4116e04e846a51272d
Refs: #1576, #1577
diff --git a/src/management/nfd-controller.hpp b/src/management/nfd-controller.hpp
index 081389e..52b37a6 100644
--- a/src/management/nfd-controller.hpp
+++ b/src/management/nfd-controller.hpp
@@ -13,17 +13,15 @@
 #ifndef NDN_MANAGEMENT_NFD_CONTROLLER_HPP
 #define NDN_MANAGEMENT_NFD_CONTROLLER_HPP
 
-#include "controller.hpp"
 #include "nfd-control-command.hpp"
 #include "../face.hpp"
 
-
 namespace ndn {
 namespace nfd {
 
 /** \brief NFD Management protocol - ControlCommand client
  */
-class Controller : public ndn::Controller
+class Controller : noncopyable
 {
 public:
   /** \brief a callback on command success
@@ -48,27 +46,12 @@
   start(const ControlParameters& parameters,
         const CommandSucceedCallback& onSuccess,
         const CommandFailCallback& onFailure,
+        const IdentityCertificate& certificate = IdentityCertificate(),
         const time::milliseconds& timeout = getDefaultCommandTimeout())
   {
     start<Command>(parameters, onSuccess, onFailure,
                    bind(&CommandInterestGenerator::generate,
-                        &m_commandInterestGenerator, _1,
-                        Name()),
-                   timeout);
-  }
-
-  template<typename Command>
-  void
-  start(const ControlParameters& parameters,
-        const CommandSucceedCallback& onSuccess,
-        const CommandFailCallback& onFailure,
-        const IdentityCertificate& certificate,
-        const time::milliseconds& timeout = getDefaultCommandTimeout())
-  {
-    start<Command>(parameters, onSuccess, onFailure,
-                   bind(&CommandInterestGenerator::generate,
-                        &m_commandInterestGenerator, _1,
-                        cref(certificate.getName())),
+                        &m_commandInterestGenerator, _1, cref(certificate.getName())),
                    timeout);
   }
 
@@ -82,83 +65,10 @@
   {
     start<Command>(parameters, onSuccess, onFailure,
                    bind(&CommandInterestGenerator::generateWithIdentity,
-                        &m_commandInterestGenerator, _1,
-                        cref(identity)),
+                        &m_commandInterestGenerator, _1, cref(identity)),
                    timeout);
   }
 
-public: // selfreg using FIB Management commands
-  virtual void
-  selfRegisterPrefix(const Name& prefixToRegister,
-                     const SuccessCallback& onSuccess,
-                     const FailCallback&    onFail)
-  {
-    this->selfRegisterPrefix(prefixToRegister, onSuccess, onFail,
-                             bind(&CommandInterestGenerator::generate,
-                                  &m_commandInterestGenerator, _1,
-                                  Name()));
-  }
-
-  virtual void
-  selfRegisterPrefix(const Name& prefixToRegister,
-                     const SuccessCallback& onSuccess,
-                     const FailCallback&    onFail,
-                     const IdentityCertificate& certificate)
-  {
-    this->selfRegisterPrefix(prefixToRegister, onSuccess, onFail,
-                             bind(&CommandInterestGenerator::generate,
-                                  &m_commandInterestGenerator, _1,
-                                  cref(certificate.getName())));
-  }
-
-  virtual void
-  selfRegisterPrefix(const Name& prefixToRegister,
-                     const SuccessCallback& onSuccess,
-                     const FailCallback&    onFail,
-                     const Name& identity)
-  {
-    this->selfRegisterPrefix(prefixToRegister, onSuccess, onFail,
-                             bind(&CommandInterestGenerator::generateWithIdentity,
-                                  &m_commandInterestGenerator, _1,
-                                  cref(identity)));
-  }
-
-  virtual void
-  selfDeregisterPrefix(const Name& prefixToDeRegister,
-                       const SuccessCallback& onSuccess,
-                       const FailCallback&    onFail)
-  {
-    this->selfDeregisterPrefix(prefixToDeRegister, onSuccess, onFail,
-                               bind(&CommandInterestGenerator::generate,
-                                    &m_commandInterestGenerator, _1,
-                                    Name()));
-  }
-
-  virtual void
-  selfDeregisterPrefix(const Name& prefixToDeRegister,
-                       const SuccessCallback& onSuccess,
-                       const FailCallback&    onFail,
-                       const IdentityCertificate& certificate)
-  {
-    this->selfDeregisterPrefix(prefixToDeRegister, onSuccess, onFail,
-                               bind(&CommandInterestGenerator::generate,
-                                    &m_commandInterestGenerator, _1,
-                                    cref(certificate.getName())));
-  }
-
-  virtual void
-  selfDeregisterPrefix(const Name& prefixToDeRegister,
-                       const SuccessCallback& onSuccess,
-                       const FailCallback&    onFail,
-                       const Name& identity)
-  {
-    this->selfDeregisterPrefix(prefixToDeRegister, onSuccess, onFail,
-                               bind(&CommandInterestGenerator::generateWithIdentity,
-                                    &m_commandInterestGenerator, _1,
-                                    cref(identity)));
-  }
-
-protected:
   template<typename Command>
   void
   start(const ControlParameters& parameters,
@@ -167,18 +77,6 @@
         const Sign& sign,
         const time::milliseconds& timeout = getDefaultCommandTimeout());
 
-  virtual void
-  selfRegisterPrefix(const Name& prefixToRegister,
-                     const SuccessCallback& onSuccess,
-                     const FailCallback&    onFail,
-                     const Sign& sign);
-
-  virtual void
-  selfDeregisterPrefix(const Name& prefixToDeRegister,
-                       const SuccessCallback& onSuccess,
-                       const FailCallback&    onFail,
-                       const Sign& sign);
-
 private:
   void
   processCommandResponse(const Data& data,
@@ -198,9 +96,8 @@
   CommandInterestGenerator m_commandInterestGenerator;
 };
 
-
 template<typename Command>
-void
+inline void
 Controller::start(const ControlParameters& parameters,
                   const CommandSucceedCallback& onSuccess,
                   const CommandFailCallback&    onFailure,