Complementarity: Applications, Algorithms and Extensions