Lando Norris beat McLaren teammate Oscar Piastri to victory at the British Grand Prix after the Australian served a penalty for a safety car infringement in an unpredictable mixed-weather race.