Fix invoke instructions branching to unspecialised code
Don't create zero-length blocks due to invoke instructions committed OOL which may fail.
Two fixes:

* Handle constants that must be cast to another type for use in a test (in practice this is usually function pointers that are implicitly cast through memory)
* Remove StructRet, Zero and SignExt attributes from cloned functions with extra return values indicating failure. SRet is invalid with a non-void return, and extension attributes cannot be applied to a struct, but in either case it doesn't matter as the attributes only exist to document an ABI constraint and clones are for internal use.