Give some structure to the model-core classes.
Make inputs be based on ModelEntry objects instead of just the instance.
Allow for model creation rules to declare parameterised types.

There's no real intelligent handling of compatibility when trying to use these types as inputs (e.g. contravariance).