auto: initial commit NetKAT_Automoton module

This module will contain a translation to and from a representation of
policies as regular expressions over characters that are a link-free
policy sequenced with a link. From this, we'll derive an automaton
representing the policy.

As of now, the data types exist, as well as a translation from regex to
policy.
auto: Initial attempt at regex_of_policy
auto: factor out shared TP sequence cases
auto: almost complete regex transformation
auto: expose module internals
auto: rework continuation data type, actually works

A few things. First, the previous represntation of continuations
suffered the limitation that it was impossible to combine a
Seq(NL, TP). This commit fixes this issue by having NL take an optional,
`link_provider`, which coincidentally is the same type that the TP
constructor raps. Raps.

Because of this change, regex_of_policy is now complete, with the
exception of choice, which we're saving for later.

Second, the initial constructors for TP and NL functions were incorrect.
They would drop previously accumulated values.
auto: add some simple checks

for sanity
auto: fix bug in Seq(NL, TP) case

Terms that needed a link were not distributing correctly across parallel
composition. But now they do.
auto: add docs to datatypes and constructors
auto: introduce option type functions, refactor
auto: Don't distribute link-free parallel compositions

Add a test to exercise this.
auto: fix bug in Par(NL, NL) case

Was reversing the order of parallel composition. That would sill
preserve the semantics but it's harder to test against.
auto: fix bug in Seq(NL, NL) case

Similar problem that Par had, except in this case it affected
associativity.
auto: fix Par(NL, NL) and Seq(NL, NL) case

Wasn't propagating the cstr correctly. This commit however introduces
associativity problems.
auto: working impl for (link-free policy; link)

The transformation definitely works for policies that are the sequence
of a link-free policy and a link. QuickCheck roundtrip tests are
included to verify, as well as a few specific regression tests that were
used to debug the previous version.

In addition, there are a few tests to test other "non-character"
policies, which suggest that the transformation is correct in general.
However, more testing is necessary.
auto: arbitrarys for link-free and -ful policies

Define two arbitrary instances for atomic policies: one that includes
links, the other doesn't. Now the other arbitrary instances take an
arbitrary atom instance instead of unit, and call that everywhere they
used to cal gen_atom_pol.
auto: fix bug in Seq(TP, _) case

i should have been j. Probably should use better names.
auto: expose link-free and link functions

Useful in general, but in particular for debugging and testing.
auto: fix big program issue in quickcheck

Resizing wasn't aggressive enough in for AST arbitrary instances.
Trees are exponential, and `n - 1` is linear. Replace the resize
function with:

  n / (1 + Random.int n)

to increase the likelihood that ASTs will get smaller the deeper down in
the data structure an arbitrary instance is called.
auto: test distributing lp policies across regexes