This allows two variables of the same struct type to be flattened into the same interface struct without a member name conflict. Add shaders-msl/frag/in_block_with_multiple_structs_of_same_type.frag unit test shader to demonstrate this.
I had to refactor the existing add_interface_block as it was getting extremely large. Now it's all split up into different readable functions.