Finalize error handling.

I still need documentation for finalizers, and some finalizer tests, but
I've implemented all of the error machinery, decided how it's all going
to work.

With this commit I've implemented propagation by throwing the `errors`
array and returning the first error unmatched by a conditional catch.

Closes #117.
Closes #116.
Closes #115.
Closes #105.