Add equal-lethargy spaced energy grid mapping method

The method is described in [LA-UR-14-24530](https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-14-24530.pdf). This method requires much less memory than unionized energy grids, especially for problems with a large number of nuclides. In my own testing, I've found that in many cases it can actually perform better than a union grid, probably due to caching effects.

This PR also removes the "union" energy grid option since it doesn't offer much performance beyond this method and requires significantly more memory. The "logarithm" option is now default, so user's who don't specify the `<energy_grid>` should get a bump in performance.

@walshjon You are the most qualified to review this if you have the time.
20 MeV is hardwired in a number of places right now. Even though some nuclides do extend to 30 or 150 MeV, if you have one nuclide that only goes to 20 MeV, you shouldn't perform transport above that energy (because you don't have all the necessary cross sections). What we should do is check for the lowest maximum energy over all nuclides in a problem and then set an upper energy cutoff based on that rather than just hardwiring 20 MeV. Are you ok with having a separate PR that addresses the hardwired 20 MeV across the code?