frontend: add support for discrimiator fields

In an abstract base class (e.g., of_action), the dicriminator field
represents the field that distinguishes between different type of
subclasses. It is marked in the base class with a '== ?', as in

   uint32_t type == ?

Each class may only define at most one discriminator field.
diff --git a/loxi_ir.py b/loxi_ir.py
index 9e266eb..fefe770 100644
--- a/loxi_ir.py
+++ b/loxi_ir.py
@@ -36,6 +36,7 @@
     'OFClass',
     'OFDataMember',
     'OFTypeMember',
+    'OFDiscriminatorMember',
     'OFLengthMember',
     'OFFieldLengthMember',
     'OFPadMember',
@@ -72,11 +73,11 @@
 The members are in the same order as on the wire.
 
 @param name
+@param superclass name of the super class
 @param members List of *Member objects
-@param super_class name of the super class
 @param params optional dictionary of parameters
 """
-class OFClass(namedtuple('OFClass', ['name', 'members', 'superclass', 'params'])):
+class OFClass(namedtuple('OFClass', ['name', 'superclass', 'members', 'virtual', 'params'])):
     def member_by_name(self, name):
         return find(self.members, lambda m: hasattr(m, "name") and m.name == name)
 
@@ -91,6 +92,16 @@
 OFDataMember = namedtuple('OFDataMember', ['name', 'oftype'])
 
 """
+Field that declares that this is an abstract super-class and
+that the sub classes will be discriminated based on this field.
+E.g., 'type' is the discriminator member of the abstract superclass
+of_action.
+
+@param name
+"""
+OFDiscriminatorMember = namedtuple('OFDiscrminatorMember', ['name', 'oftype'])
+
+"""
 Field used to determine the type of an OpenFlow object
 
 @param name