Slight reworking of fail logic.  Now set_white/set_black can detect that the task is already done and return unmodified self