After hardening, if err is a passable error, return it.

Otherwise, return a new passable error that propagates the diagnostic info of the original, and is linked to the original as a note.

TODO Adopt a more flexible notion of passable error, in which a passable error can contain other own data properties with throwable values.