nib: allow users to access the controller's nib

Application event handlers already have access to it. However, it's
necessary for monitoring and diagnostics for the application that the
controller's embedded in to access this information as well.
Merge pull request #364 from frenetic-lang/nib

nib: allow users to access the controller's nib
discovery: report PortDown events

When discovery was enabled, the code was incorrectly swallowing PortDown
events and just reporting any LinkDown events related to that port. The
code now reports the LinkDown event, followed by the PortDown event.
Merge pull request #366 from frenetic-lang/discovery

discovery: report PortDown events
functor: Headers functor reuses module arguments

The Headers.Make functor took separate modules for the ethernet source
and destination addresses, among others. It should just take one module
for the address type and use it for both source and destination.
functor: reorg headers, add NetKAT_Types.mli

Put Headers functor in its own file that can be shared across multiple
files. HeadersValues together with related structures now reside in
NetKAT_Semantics.