Try to choose an alternative that passes semantic predicates in...

getAltThatFinishedDecisionEntryRule (fixes #529)

This is an alternative solution to #530, with the following advantages:

1. Avoids all additional overhead for when called from LL prediction (`hasSemanticContext` is false)
2. Avoids creating the exception object unless it will actually be thrown
3. Use `evalSemanticContext` for predicate evaluation, and only when necessary
4. Fall back to the original algorithm if no alternative remains after predicate evaluation
5. Uses the new unit test from #530, but properly labels it as a regression test for this issue