(#8040) Add a function to specify containment

This adds the 'contain' function. When used inside of a class definition, it
will create a containment relationship such that the current class contains
the argument of 'contain'.
(#8040) Don't allow duplicate contain calls
(#8040) Test order of application for contained classes

This also includes some minor refactoring of the contain function.
(#8040) Do not create duplicate edges

If a class is contained twice in the same location, this is consistent but
should only create one edge.
(#8040) Clarify behavior in tests around multiple containment
Merge pull request #1878 from pcarlisle/feature/8040-contain-function

(#8040) Add a 'contain' function