Parse radiationlessEmission probability from mml; +test

This is the probability that an electron will deexcite
only by adding KE after a collision, vs emitting a
photon at any time.

[#48674945]
Refactor QD excitation to anticipate de-excitation.

Refactoring the code so that we will check for close neighbors only
once, and then try to perform both excitation and de-excitation on
each pair.

This is more efficient than ClassicMW's model (which recomputes
close neighbors each time), and should provide the exact same
results.

[#48674945]
De-excite atoms during collision; possibly increase KE

When atoms collide, if one atom has an electron in an excited
state it will dexcite. It will then randomly either emit that
energy as an increase in the velocities of the two atoms (>KE),
or as a photon (not yet implemented), with a probability based
on the model settings.
Always excite an atom if one can be excited

Previously if both atoms had electrons that could be excited,
we randomly selected one and then tried to excite it.

Now we check the result of that excitation and try to excite
the other if the first one failed.

This prevents the situation where we have enough energy to only
excite one of the atoms, but we randomly picked the other, resulting
in neither atom getting excited.

[#48674803]
Prevent multiple QD operations during same collision

We maintain a list of the pairs of atoms that have just
had a QD operation, and only clear them from that list
once their collision has ended. This allows us to prevent
multiple QD operations occurring during the same collision.

Classic MW handles this slightly differently, by defining
a minimum-interval time during which the quantum engine
will not respond to events. This seems to be a slightly
cleaner way of achieving the same ends.

[#48674945]