Always get the most energy optimal reaction

Previously the first spontaneous reaction found was always returned.
Now all possible reactions will be search and the most energy optimal
reaction will be returned.

The algorithm that is responsible for find possible reactions have been
rewritten to scale better when more reactions are added.

This is done with the help of a new data structure, a MultiMap.

The MultiMap can have several values for each key, and several keys can
point to the same value.