intf: add next_hop_via, returns label

the next_hop function tells you what the next node in the graph is, but
many times you want to know how you got there. In particular, you often
want to know which ports on different switches are connected.
next_hop_via allows you to retrieve that information.
intf: Rename ports_of_switch to ports_of_node

The current API seems incomplete, but exposes all the functions
necessary to work with hosts. Certain conventions need to be respected
by the user of the library, such as host destination port always being
set to 0 (this may be a bad assumption of a host is connected to
multiple switches), and then it seems to get you pretty far.
intf: Rename add_switch_edge to add_ports_edge

This function was just adding a directed edge between to nodes with
label constructed with the provided soruce and destination port. The new
name more accurately reflects that, though there is still room for
improvement.
inft: include remove_port function

This function will get rid of the link associated with the given node
and port.
intf: add remove_switch function

For those unfortunate moments when switches go down.
intf: use correct exception names

The exception name that succ and pred throw when the vertex is not in the
graph is Invalid_argument, not Not_found, which is the one that the code
previously used.
Merge pull request #30 from frenetic-lang/intf

Interface changes for NIB