PLAT-6795 - Fix application of EOM flag when not at EOM

Test and rework one of the many schedule generation methods.

This change ensures that the end-of-month rule is only applied if the appropriate date (start or end) is at the end-of-month. It also ensures that the rolling rule does not go beyond the end date. Plus tests.
There seem to be a lot of other cases in this class (I've counted at least five) where the same flawed logic is used to decide whether to apply the EOM rule without checking the stub type and only checking the start date. Do they all need fixing?