We're also going to need this for `IEditController`. Separating all of
these classes will also keep everything much more maintainable with all
of these associated structs.
This is less likely to clash with names used by interfaces and it's a
bit clearer what's going on (since they are basically proxies for
constructors and destructors).
Transferring some argument pack is much easier than trying to
deserialize into an existing object when you also have to transfer more
information than just that object.