Hrm, instead of passing a message, what if we do the following:

1) `defimpl` will by default import a `unknown_protocol!(thing, addendum // "")` into the context

2) any implementation can call `unknown_protocol!(thing, addendum)` instead of doing a direct raise

In case you are not a fan of `unknown_protocol!`, I would at least change it to `raise Protocol.UndefinedError, protocol: protocol, structure: thing, addendum: "only iolists are supported"`. I think we should always include the protocol in `Protocol.UndefinedError`