[Effects handling] Move "illegal context" strings into diagnostic text.
The "illegal context" diagnostics were passing strings from the C++
code directly into diagnostic text for things like "a default
argument". That causes a bunch of duplicated code and defeats
localization of diagnostics, so move to a %select in the diagnostic.