allow computations even if a discrete symmetry is broken
In the computation of modes, checks whether each discrete symmetry holds separately. If it is broken, a warning is raised, and the symmetry is ignored in the computation, instead of raising an error.
Also adds methods to FiniteSystem and InfiniteSystem that call discrete_symmetry.validate on the Hamiltonian, to make it easier to check whether the system breaks declared symmetries.
Closes #236 (closed) and #242 (closed)