Actually a simple join table should work and for each type of contribution.
If you have this relationship:
People::PeopleID = People_Song::PeopleID
Songs::SongID = People_Song::SongID
You can add a field in People_Song to document the type of contribution.
The trick is to document contributions to songs rather than to works.