Make enums better

cara is no longer typed to the implementation of enums, just the
iteration of them, which is part of the API. By including the enumerants
without the annotations in the forward declaration, we can
fully-enough-define the enum when first declared and only add on the
annotations (which must be after all annotations have been
forward-declared) later.