Who will win Iran's presidential election?

Iranian President Hassan Rouhani will likely win re-election on May 19, but the race has become much closer and more interesting than anyone could have expected.