Did some more work on the CSP, only just started filling in the checkValidAssignment() function.

I think there could still be some bits that need adding to the other classes, but they will be done when needed, the only major thing is making a constructor for the Problem class that basically copies a Problem that already exists, otherwise we just get references to the initialState constantly which isn't what we need. The only reason initialState is getting passed around is for the updating print function while the program is running.

Also, biggest commit message ever.