passes compiler and test suite, finally! TODO: also switch the derived asset kinds to use P<Media>, P<Struct>,.... maybe do the same with MObject?
WIP doesn't pass the compiler (not due to the merge)