describe error better for humans
fix finally to catch and throw errors with die. now you can pass
errors to the @then cb and it will appear in output
define a new @sub function which allows users to make hiearchical
moves with flow control, similar to a subroutine