tdk-based compiler rewrite

This pull requests is a rewrite of `NetKAT_LocalCompiler`. It uses the [ocaml-tdk](https://github.com/frenetic-lang/ocaml-tdk) library to represent a NetKAT term as a function, from which it generates a flow table. Some of its benefits:

* 240x speedup over the previous implementation in some cases;
* decrease table size significantly;
* reduce the problem of table minimization to variable ordering in the decision diagram;
* provide a practical algorithm for determining policy equivalence, which can be used to reduce network churn during policy updates;
* reduce code size by one-half; and
* reduce code complexity.

There are some changes that should be made to the controller to take advantage of the new compiler. These will come later in a separate pull request.

Related to #351, as `NetKAT_Types` now as an `.mli` file.
Closes #312 #212 #213 #210 by making them invalid.
Closes #197.

Sort-of depends on #367, but also includes those commits.