Use the EnamlDef metaclass to help with initial population.

This greatly simplifies the Declarative class and makes it easier
to reason about when and how an object is populated.