SSP-2638 Fix several issues related to plan edit validation and 'undo'

Mostly has to do with a) re-running validations after a course edit
errors out or is canceled out of and b) ensuring that original
UI state is restored as much as possible when a course edit errors
out or is canceled out of.

Specific issues addressed:

 - A requiring course would be incorrectly marked as invalid after
   canceling a move of its pre-required course to a later term
 - Validation API relied on client to clear out previous validation
   state
 - Faults from POSTs to /validate API would leave the UI in an
   unpredictable state, e.g. previous validations would be lost, edits
   would appear to 'take' but would not be preserved on save
 - Canceling a course move would mark plan as dirty
 - Canceling a course move would result in unpredictable course ordering
   in source term
 - Fault during course delete validation would mark a plan as dirty
 - Reordering an un-offered course in its already planned term would
   re-prompt the user with the validation failure messages.

Faults during course move validation will still (incorrectly) mark a
plan as dirty in some cases, but this patch makes a best effort at
restoring that course its previous location relative to other planned
courses in its source term.