Fixing a very subtle bug, in which a stack-bounce that happens in the middle of checking a record annotation will cause the annotation-answer "ok" to be returned instead of the intended value.

Basically, because record annotations are not refinements, checkAnn
decided that they were safe to invoke in direct style.  But record
annotations internally use safeCall, which may well bounce the stack.
If so, the checkAnn stack frame will not be saved, and hence won't be
restored.  This fix is to force record annotations to be called via
safeCall, which ensures that this lost frame won't happen.  (An
alternate solution, but a technically trickier one, is to write a
version of record-annotation checking that does not use safeCall.  We
may revisit that idea if the performance of safeCall here truly
becomes an issue...)

(cherry picked from commit cecd292c00cf72513e632f76ed0ef8cb7055485e)
Fixing the splitting of let-bound function applications, where any annotations on the binding were being ignored.  This led to not checking the return annotation on function positions (because we simply compile the body of a function to a let expression whose binding uses the return annotation).

(effectively the same commit as e01b5b69df64b1d5e92433e72a3082e8d2db40da)
regression tests to ensure we check for return annotations on
functions and methods