Bugfix for surface reaction bug reported by Tom.

This commit fixes a bug that was triggered by a situation in
which the model contained a surface region with an ABSORPTIVE/REFLECTIVE
surface class and a second region without a surface class
which partially or fully overlapped with the first one.

In the process of product placement, the previous code looked
up ABSORPTIVE/REFLECTIVE regions for a given grid molecule
in a way that could erroneously assign an ABSORPTIVE/REFLECTIVE
property to a plain region which overlapped with another region
that had an ABSORPTIVE/REFLECTIVE property. Then, given a
certain configuration of regions a situation could arise in which
a product could not be placed at all causing MCell to spend
most of its time trying to (unsuccessfully) place products
(and leak memory). This issue has been fixed and regions are
now discovered properly.

Incidentally, the product placement code also contained a
bunch of memory leaks (see above) that were plugged as well.

While fixing the bug I also refactored a bit of code.