Add ability to create MGXS for Lumped Fission Products
Right now the MGXS and Library class MGXS sets can be created on a macroscopic (per material) or microscopic (per nuclide) basis. Typical MGXS use cases typically combine less important isotopes (generally some fission products) as a lumped fission product. It would there be useful if the user can request that MGXS and Library classes output some subset of isotopes as a lumped MGXS set for each domain.
While obviously these MGXS can be merged by the user, there is a use-case that can make these more than just an ease-of-use item: When the user requests consistent scatter matrix or consistent nu-scatter matrix types, The MGXS class will scale the scattering probability matrix (tallied by analog scoring) by the groupwise scatter xs (a vector, tallied by tracklength scoring). Since the total and absorption xs are tallied with tracklength tallies, this approach maintains a reaction rate balance in the resultant MGXS. However, if tallying xs by nuclide, then rare isotopes can have no analog scores for the scattering probability matrix, even if they have a non-zero tracklength scatter vector score. In this case, the scatter vector score cannot maintain neutron balance. To alleviate this problem, the merging of the lumped fission product data has to happen before the scaling by the scatter vector in the relevant portions of the xs_tally method. (Note this does not result in a perfect situation with a fully resolved energy-angle distribution, but at least it will preserve reaction rate balance).
This could be implemented either on the C++ side (nuclides merged for any generic tally type) with matching changes to the Python API, or only on the Python API side. If on the Python API side alone, I suggest starting by adding to/extending AggregateNuclide in arithmetic.py to allow for a weighted sum, with the weights being the number densities.