Implement OpenFlow support for MPLS, for up to 3 labels.

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.

This commit attempts to implement something easier to understand and more
powerful by just keeping track of all the labels in struct flow.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Co-authored-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Simon Horman <horms@verge.net.au>
Add OpenFlow support for matching multiple MPLS labels at once.

This is an OpenFlow extension that might be useful.  I don't know how MPLS
works in practice well enough to judge.

Signed-off-by: Ben Pfaff <blp@nicira.com>