Implement the enums with boxed values and explicit lifetimes.
Change enums/structs to take in type parameters.

From my current understanding of trait objects and the Box<Trait>
object, these references are resolved at runtime (DST) and are more for
the purpose of allowing multiple implementations to use at runtime.

For this project, each binary generated from it should have only one
canonical implementation of each trait.
Compile and pass tests with send_artifact_msg.