Quadrature methods from individual sources are implemented in terms of individual classes. Except for some examples (e.g. 1d Gauss-Legendre), these are equivalent. Instead, a single class for each geometry could be used, which selects the method from a source specified by the method_spec. This would also help with #3 and #5.