South Africa passes controversial mercenaries bill