Initial Consistent Updates commit

Basic 2-Phase Commit algorithm, disabled

Basic consistent updates test app. Currently breaks when Controller actions get spliced in, which causes unrealizable mods. Easy fix is to stamp VLAN
Added barriers/ivars protocol

Updates working modulo topo discovery

Current topology discovery is super slow so we think every port is an external port
Added single-switch consistent update

More efficient per-switch consistent update
Block on barrier send before reading Ivar

Updates are working for tree,2,2!
Added consistent update flag. Reformatted.
net_updates: combine handlers, parametrized by update approach
net_updates: Txn module to handle RPC-like switch communication

This module exposes a send function that will return an Ivar.t that
will be filled with the response from the switch whe the controller
receives the response. The management of xids is hidden from the user.

Be sure to only use Txn.send with messages that will provoke the switch
to send a response. If you don't and you block on reading the returned
Ivar.t, then you'll be waiting until the switch disconnects.
net_updates: Use Txn for barriers, treat error and disconnect differently

Replace code for barrier requests with the Txn module. Txn will detect
switch disconnects, so it's no longer necessary to try and guess when
that happens using a timeout. Doing this also enables the code to
distinguish disconnect and error scenarios.
net_update: make update strategy a command-line argument

Use the --update=STRATEGY flag of katnetic to specify the update
strategy. The default is best-effort.
net_update: change `Result () to `Complete

This is related to the return type of sending a barrier request.
net_updates: remove debug line that hits failwith

Serialization for Net.Topology isn't implemented.
net_updates: set pipe budget to avoid deadlock

This is a parameter that needs to be tweaked. See comment in the commit
for details.
net_update: don't dump flowtables in debug mode

Left the prints in comments so that they can be easily swapped in when
required.
net_updates: Set default log level to `Info

This will turn into a flag in the app branch.
Merge pull request #298 from frenetic-lang/network_updates

Network updates
lattice: use new packet and openflow APIs
Merge pull request #301 from frenetic-lang/lattice

Use new packet and openflow APIs
Changes from ocaml-openflow merge
Merge branch 'master' into ip-mask

Conflicts:
	lib/Flowterp.ml
	lib/NetKAT_LocalCompiler.ml