Fix #23: allow forward definition of enums

Allow forward definition of enums to define enum tag name.  Correctly
override forward definitions with full definitions.  Raise an error if
an incomplete enum type is used in an enum hook.