This is done by generating the supporting preprocessor macros with ERB up to the required arity, like we do for the struct macros themselves. Fixes #376