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.)

Would prefer a blank line after this enum.

Also `WARN_OR_FAIL_INESSENTIAL_IF_DYNAMIC` is a hard-to-understand name. It wasn't obvious where the grouping is: i.e. WARN IF NOT INESSENTIAL OR NOT DYNAMIC; FAIL IF INESSENTIAL AND IF DYNAMIC. At least needs javadoc.