Palestinian factions Hamas and Fatah reach agreement in Cairo