Update: always return and assign a copy of objects by default, but provide a trait to use references
The default behavior is to favor security and separation between different objects.
Everytime an object is assigned or returned via a c_base_return class type, use a copy (clone) of that object.
This is good practice for security and data integrity.
In the event that a reference is needed (generally a good practice for performance and resource reasons), a trait is provided.
This trait must be manually assigned to each class.
This functionality must use distinct functions for assigning and retreiving the references to guarantee consistency in design and avoidance of accidents.
It is very important to note that this design can cause performance issues if this particular design is not understood.
This previous designs intended this behavior, but was not consistent.
This behavior should now be more consistent.