Stephen Gallacher wins Dubai Desert Classic as Rory McIlroy fades to ninth