Lewis Hamilton holds off Fernando Alonso to win German Grand Prix