daft_punk: rewrite host discovery

Host discovery is now split up into two parts:

  * A configurable application that determines the policy that should be
    installed on the network; and
  * A Stage.t that will actually do the PacketIn processing, and respond
    to other network events.

Splitting it up into two parts is important so as to keep a consistent
order of network events. Prevously, a PacketIn would be processed by the
application and, if necessary, the application would send a HostUp event
into the event stream. However this HostUp event would be inserted into
the "beginning" of the event stream, opening up the possibility that a
PortDown event on that host's port would reach the controller before the
applications even saw the HostUp event. This could result in a situation
where an application received a HostUp event without the NIB reflecting
it.

The same issue exists with switch link discovery. This will be fixed
next.