Refactored unimolecular reactions checks in run_timestep.
More code cleanup and refactoring.
Fixed bug in unimolecular reaction code with surfaces.

The previous code did not force surface reactants
to reschedule their uni-molecular reactions when moving
to a different wall with different surface class(es).
This caused reactions of the form

A' @surf -> ....

to potentially be missed.

NOTE 1: The new implementation is not optimal since
reactions are rescheduled anytime a molecule moves
to a new wall even if this wall has the same surface
class. Checking for an actual change in surface classes
may be more efficient.

NOTE 2: This fix should address a surface reaction bug
reported by Tom.