Add support for IP masks

This pull request adds support for IP prefix masking.

It also refactors LocalCompiler to use PrefixTable instead of PosNeg -- a more flexible representation that will enable us to use more kinds of patterns in the future.
(Side note: I'm going to rename meet to join in ocaml-openflow.)

For two IP masks, I believe that a meet is defined only if the two are comparable. And if they are comparable, it's the one with the larger mask. In other words, their meet is their intersection. This seems to be doing something related but not identical. Is there a reason why it's not just the intersection?