Modular dilute_solution_model and unit tests

The function dilute_solution_model is modularized
and now accepts trial chemical potentials as input and can generate either
the defect concentration plot or  defect formation energies only.
In addition unit tests are added for dilute_solution_model