Rival Syrian opposition factions hammer out Idlib truce