Simplify handling of cyclical (WRT dependant types) managed models.

Pushes the complexity into one place, minimises inheritance, and reduces mutability in the final output types.

+review REVIEW-5240
Slightly more test coverage for cyclical models.

+review REVIEW-5240