Add an invariant to Move

The data in Move is in a don't-care state after initializing using the default constructor,
which prevents setting an invariant on the object unless created using one of the
custom contructors (where the data can be controlled).