Fixed: Can set earlier due date as an individual due date extension and related bugs

This pull request fixes [LMS-6563: Can enter in earlier date in Individual Extension](https://openedx.atlassian.net/browse/LMS-6563), which was also mentioned in the individual due date extensions feature PR #2062.

Now an error will occur if the instructor attempts to set a due date that is earlier than the original due date.

I also fixed two related bugs that I noticed while working on this:
* The API would allow setting a due date extension on a unit that had no due date at all. This now returns an error.
* If one set an individual due date extension, then deleted the original due date, an Internal Server Error (500) would occur when deleting the due date extension, and neither a success nor failure message would be shown to the user.

Unit tests are included.

This was done for OpenCraft ( cc @antoviaque ) and falls under their organization contributor agreement.
There are two different cases here:

1. API call to `reset_due_date()` when there is no extended due date to reset:
    As you point out, this succeeds but probably should have an error message or a warning - I hadn't tested this case at all, actually. I will add in a test and an error.
2. API call to `reset_due_date()` when there *is* an extended due date to reset, but there is not a "normal" due date on the module - this is an "orphaned" extended due date.

The `"(no due date)"` line in question is for case 2, which is all that I had considered. In case 2, I don't think that this API method should return a string like "Has no due date to reset" in this case, because that sounds like an error and implies that the API call did nothing. However, the API call *was* successful in deleting the due date extension and has changed the database. If you think the returned string should be changed, how about something like "Successfully removed invalid due date extension (unit has no due date). " ?