World number one Jannik Sinner overcomes Alexander Zverev in a three-set thriller to reach the final of the Cincinnati Open.