Alexander Zverev has reached the final of the ATP Finals in London after a shock win over Roger Federer.