Lasith Malinga's magnificent four-wicket haul helped Sri Lanka stun Cricket World Cup favourites England despite Ben Stokes' valiant 82.