Don't call subset::end() repeatedly.
Require ising grid size to be even.

It turns out to be impossible for a wrapped Ising model of odd dimension to satisfy the conditions of the reversible Ising dynamics. This is because such a grid would necessarily have neighbors of the same color around the borders. It might be possible to stop using wrapping if we started using a larger grid, but for the meantime we'll just raise an exception during construction of grids of odd dimension.
Check the new value of the cell, not the old value, when checking for invalid values.