loci: add clean API to get OXM from a set-field action

Right now users of loci need to dig into the wire buffer and internal loci
functions to parse the OXM in a set-field action. This is because loci doesn't
have good support for subtyped fields (as opposed to list elements).

This commit doesn't add generic support for subtyped fields, but it does add a
reasonable API over the special case code.
diff --git a/c_gen/build_of_g.py b/c_gen/build_of_g.py
index f117bfd..85be353 100755
--- a/c_gen/build_of_g.py
+++ b/c_gen/build_of_g.py
@@ -153,6 +153,11 @@
             # but is variable length
             bytes = -1
             len_update = 8
+        elif base_type == "of_oxm_header_t":
+            # This is a special case: it has non-zero min length
+            # but is variable length
+            bytes = -1
+            len_update = 4
         elif base_type in of_g.of_base_types:
             bytes = of_g.of_base_types[base_type]["bytes"]
         else:
@@ -330,7 +335,7 @@
                 else:
                     # HACK the C backend does not yet support of_oxm_t
                     if m.oftype == 'of_oxm_t':
-                        m_type = 'of_octets_t'
+                        m_type = 'of_oxm_header_t'
                     else:
                         enum = find(lambda e: e.name == m.oftype, protocol.enums)
                         if enum and "wire_type" in enum.params: