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.
tdk: initial rewrite of the compiler
tdk: fix bug in impelmentation of star

The algorithm was using the sum and prod Tdk operations, while it should
have been using the union and seq NetKAT operations.
tdk: remove internal Algo module

This was used by the previous LocalCompiler implementation.
parser: use true/false in pred instead of */<none>

The previous syntax allowed for ambiguity in grammar. Consider the
following expression:

  (* and *) and ethSrc = 1

The *'s are meant to represent true, but combined with the leading and
trailing parentheses, they are parsed as a comment.
parser: allow 8-bit literals as vlan values
tdk: conform to new restric type

restrict now takes a list of variable assignment rather than a single
assignment.
tdk: optimize sequential composition (part 1)

In the case that you're sequentially composing an arbitrary policy with
an unguarded action, the operation reduces to sequencing of the Vlr.
This is because the unguarded action has no decision variables that can
be eliminated by the left-hand policy.
tdk: optimize sequential composition (part 2)

The branch case of the fold implements an if-then-else expression in the
Vlr. In the case that the true and false branches are equal, the
operation can just return the true branch and no further processing is
necessary.

This contributes a not insiginficant factor the performance improvement
of the compiler rewrite.
tdk: include the internal Repr module to define names
tdk: add library dependency to .travis.yml
tdk: improve to_policy for filter case

Special case to_policy when the two subdiagrams are filters. When that's
the case, the code can generate a filter as a result rather than a
policy.
tdk: fix unit tests to identify new compiler output

The fixes were mostly related to ordering of expressions, and some
additional simplification that the new compiler performs.
tdk: clean up debug output
tdk: add optimization for union

According to the NetKAT laws:

  a | a = a

It'd be even better to push this down to the tdk library, but that will
require a bit of API design.
tdk: implement in_port rewriting

In the case where the port has been mached and assigned to the same
value, such as in the example policy:

  filter port = 1; port := 1

the compiler will now generate a flow that forwards the packet to InPort
rather than physical port 1.
tdk: eliminate redundant modifications from actions

In the case where a field matches and is assigned to the same value,
such as in the example policy:

  filter ethSrc = 1; ethSrc := 1

the compiler will now generate a flow that does not perform the
modification.
tdk: correct comment in Action.sum
tdk: Add Action.negate function