[pre-RFC] [API Change] Formalizing c_backend_api

This is great @areusch! I appreciate the ability to re-introduce c_backend_api.h to leverage existing abstractions without having to necessarily use c_packed_func.h. It’d be great if we only required the single backend header file, I think the only thing that prevents is having to copy function_attributes.h across as well - I’d suggest all of the backend definition, including attributes, could live in the single c_backend_api.h?

Extending that a bit, if we only need to take c_backend_api.h into a project as a header, could we not raise these headers out of the runtime folder? Potentially include/tvm/c_backend_api.h or even include/tvm_backend_api.h? My assumption here is that the backend would always be written in something with a stable C ABI. This could potentially be true of c_packed_func.h/tvm_packed_func.h as well, leaving only the runtime-specific headers in the runtime folder?

I’d be interested in considering just TVMPackedFunc? Is there a reason to mark it explicitly as a C function?