[RFC] Alternate approach to MPLS.

I've been a little frustrated with the current approach to MPLS, because it
seems quite difficult to understand.  One particularly difficult bit for
me is the variables used during translation, e.g. mpls_depth_delta and
pre_push_mpls_lse.  And what we end up with is support for a single MPLS
label, which I don't think is going to make any real-world users happy.

I think that we can do something easier to understand and more powerful
by just keeping track of all the labels in struct flow.  This patch is a
first stab at that.  It's incomplete--in particular I have not implemented
commit_mpls_action() because it seems slightly tricky and it's very late
at night here--and obviously untested, but I'd appreciate feedback on the
approach.

I think that if this works out then it would obviate the need for patches
"odp: Allow VLAN actions after MPLS actions" and "lib: Support pushing of
MPLS LSE before or after VLAN tag".

Co-authored-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>