This makes error messages that are propagated to users in case of type
mismatch clearer.
This change was originally motivated by the discrepancy between Python2
and Python3:
# Python2
>>> int
<type 'int'>
# Python3
>>> int
<class 'int'>
Using the type full name avoids relying on a particular representation
for the types.
TN: SB13-026
Instead of using Python's inheritance mechanism to define enum nodes,
the new mechanism requires adding enum_node = True to the class' body.
Inheritance can now be used to make the enum node derive from any
subclass of ASTNode instead ASTNode itself.