restructure check_constraints so it can be called without delay
check constraints of @:op methods
preserve type semantics of overloaded == and != if second type is a monomorph (closes #2871)
rewrite Abstract.do_check_cast (see #2856)
fix map cast recursion
Merge pull request #2911 from Simn/abstract-fixes

Abstract fixes