NAT
static: implement create_static more efficiently

The previous implementation of create_static was just a thin wrapper
around create, which kept the update and pkt_out pipes open even though
the app would never generate an update or a packet out. The new
implementation uses the lower-level raw_app API to construct the app and
in the process closes the update and pkt_out pipes.
static: implement guard in terms of create_static

The new implementation of create_static achieves the same goals as the
custom implementation of guard. Removing the custom guard implementation
in favor of having fewer combinators implemented at the raw_app level.
A camlp4 extension to write NetKAT terms.

Also included is the NetKAT.Std module, which makes simple applications less
noisy.
Added travis deps
Merge pull request #324 from frenetic-lang/camlp4

A camlp4 extension to write NetKAT terms.
Bugfix to syntax extension

EOF production is needed. Added + and filter as keywords.
predicates in qq
Merge pull request #327 from frenetic-lang/syntax

Syntax
Merge pull request #323 from frenetic-lang/static

Improve implementations of create_static and guard.
Fix issues from seliopou's review
Merge branch 'NAT'

Conflicts:
	_tags
	async/async.mldylib
	lib/netkat.mldylib
	myocamlbuild.ml
	setup.ml
cleanup: remove netkat_test

The policy it generates is not a valid policy (it uses tokens such as
'->' for assignment). In addition it can easily be replaced by a static
policy.
Merge pull request #333 from frenetic-lang/cleanup

cleanup: remove netkat_test
pipe_pred: do not compile policies with pipes in preds

The way that the LocalCompiler generated flowtables when pipes appeared
in predicates broke the NetKAT laws, specifically ka-plus-comm which you
can see on build 706 on travis-ci. The LocalCompiler now fails if it
encounters a pipe in a predicate, and the quickcheck arbitrary instance
for predicates has been changed to not include pipe locations.
learn_all: learn all unknown src addresses

The learning application as previously written would not always learn
all mac addesses on the network, as it was sending packets to the
controller with an unknown destination rather than an unknown source.
Rather than checking for an unknown destination, the learning
application now checks for unknown sources to send to the controller.

This change will break broadcast traffic, as the check on unknown
destinations was what the application relied on to properly forward
broadcast traffic from the controller. An additional check that the
destination is a broadcast address fixes this issue while leaving the
rest of the code untouched.
Merge pull request #334 from frenetic-lang/pipe_pred

pipe_pred: do not compile policies with pipes in preds
sync_pol: use the last policy update as the current policy

The controller must keep track of the current, authoritative policy for
the network. While there may be delay in actually implementing that
policy on the network, that delay should be minimized.

Prior to this commit the controller used the current policy for the
application it was running to determine the current, authoritative
policy for the network. But when the user specifies a non-zero
policy_queue_size, the application's current policy may differ greatly
from the one installed on the network, and that difference may persist
for quite some time. The result is that many packets sent to the
controller will be subject to a policy that is significantly different
from the network policy that forwarded them to the controller in the
first place.

This commit changes the bookkeeping of the current policy so that the
current policy is determined when the controller begins to install the
latest policy update on the network.
Fix Camlp4 parser bug, replacing '=' with ':='

Also rationalize order of field names.
Fix bug in LocalCompiler described in #341.

The issue was that the Pattern.obscures function was *totally
bogus*. It was using a fold_left instead of a fold_right and not
dropping false values from the first table.

Fixing these errors means that

```
filter ethDst = 00:00:00:00:00:02; port := 2 |
filter ethDst = 00:00:00:00:00:01; port := 1 |
filter ethDst = ff:ff:ff:ff:ff:ff;
(filter port = 2; port := 1 | filter port = 1; port := 2)
```
compiles to a correct flow table:
```
flowtable for switch 0:
[{pattern={ethDst=00:00:00:00:00:02},action=Output(2),cookie=0,
 idle_timeout=Permanent,hard_timeout=Permanent}
{pattern={ethDst=00:00:00:00:00:01,port=2},action=,cookie=0,
idle_timeout=Permanent,hard_timeout=Permanent}
{pattern={ethDst=ff:ff:ff:ff:ff:ff,port=2},action=Output(1),cookie=0,
idle_timeout=Permanent,hard_timeout=Permanent}
{pattern={ethDst=00:00:00:00:00:01},action=Output(1),cookie=0,
idle_timeout=Permanent,hard_timeout=Permanent}
{pattern={ethDst=ff:ff:ff:ff:ff:ff,port=1},action=Output(2),cookie=0,
idle_timeout=Permanent,hard_timeout=Permanent}
{pattern={ethDst=ff:ff:ff:ff:ff:ff},action=,cookie=0,idle_timeout=Permanent,
hard_timeout=Permanent}
{pattern={},action=,cookie=0,idle_timeout=Permanent,hard_timeout=Permanent}]
```