This method will attempt to determine the result programmatically.
However depending on the BYXXX rule parts that have been set, it might
not always be possible. As a last resort, this method will loop
through all occurrences until $date. This will incurr some performance
penalty.