Incremental action translation

Reviewer: @harshsin

Previously the forwarding pipeline would output a list of IVS actions which would then get translated into openvswitch kernel actions. Looping over the IVS actions list is expensive due in part to the unpredictable branch. Some pipelines know exactly what actions they're going to emit, so it's wasteful to throw them in a TLV list that we have to parse later. With the new action module, the pipeline can just call e.g. `action_output(ctx, port)` and have the openvswitch action written to the Netlink message immediately.