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?
Missing some TODOs and test coverage
WIP doesn't pass the compiler (not due to the merge)