Misc errors when errors happen

When things go really wrong, a lot more things also go wrong.

(NB this builds on #83 at present, so merge that first.)

it's usually terminal, normally there's nothing someone would do thereafter; if people are needing to inspect it we could change the api to return that, but most of the time i think they won't, so returning something would encourage the wrong use of the fluent api