Federer stuns Djokovic to reach French