v5: Rebased, allow to specify prefixes to use for each generated interface method.
This still generates macros in separate `_impl.h` files, but it seems that I got the intention wrong and if we're keeping them alongside the interface IDLs it'd be just the same to generate them in the headers themselves.
I've considered generating code for each class, with some specific IDL syntax to declare what needs to be generated, all generated locally in each module, but I'm not convinced it'd be convenient:
We would need to invent a new custom IDL syntax for that. The syntax would either be simple and lack flexibility that the macros have. Or it would be complex to allow similar flexibility, and I don't think we want to invent any kind of complicated non-standard DSL syntax for that.
With the macros we can selectively generate only some methods (or even parts of the methods - like QueryInterface GUID checks), and that's useful for anything that needs slightly unusual logic. The generic vector implementation that is in https://gitlab.winehq.org/wine/wine/-/merge_requests/6207/diffs?commit_id=05... is a good example, it needs some specific QueryInterface case but otherwise can use the macros to generate every forwarded interface or its vtables. They also let us gradually transition code, that I think would be more difficult with generated class implementation code.