Rename internal method to -completeWithError:

Seems to fit other API better
Keep weak reference to protocol after breaking retain cycle

Should avoid all risk of protocol sending a message that the operation
doesn't think makes sense because it's cleared out its reference to the
protocol
Also looks like this will avoid a potential crash/mishandling where
protocols might sometimes not be told they've been cancelled
Clarify with comment for future me
Adjust and expand protocol assertions to latest setup, plus to be more informative