I'm still not satisfied with the new implementation of the speciation feature.
First of all, I think it's bad to require Eq and Hash in the Species type. Perhaps I can fix this by using a BTreeMap, but then I need PartialOrd.
I also don't like the way the algorithm works. It seems naive, slow, and messy.