Implement lattice operations for patterns

This pull request relates to patterns and operations on patterns. Specifically:

* `SDN_Types.pattern` has been moved into its own module at `SDN_Types.Pattern`;
* operations related to `Pattern.t`'s lattice structure are implemented in that submodule; and
* those operations have been tested using quickcheck.

Depends on frenetic-lang/ocaml-packet#31.