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.
learn_all: implement broadcast/flooding on the switch

The learning application now implements broadcast adresses and unknown
destination forwarding (flood) on the switch. Previously, this was
accomplished by sending these packets to the controller.
Merge branch 'master' into learn_all
learn_all: all forwarding happens on the switch

The policy that the learning app generates now handles all forwarding,
including broadcast traffic and unknown destinations. The controller
should no longer generate packet out messages in response to packet ins.
If the packet needs to be forwarded, the policy has already handled it.
learn_all: use smart constructors
Merge branch 'master' into learn_all
Merge pull request #338 from frenetic-lang/learn_all

learn_all: learn all unknown src addresses