Complete the implementation of error behaviour relating to the checkout interface, add refork_after_error option

- Now you can actually re-use a checkout that has thrown a "regular"
  error to extract error states or rollback transactions or whatever.
  This was hinted at in the docs earlier but only now is the
  implementation complete.

- A new option refork_after_error stops the worker associated with a
  checkout that has thrown an error in its lifetime from being used
  in subsequent checkouts.

- The fatal error behaviour (ie worker timeouts) is now to throw
  the same fatal error as a result of all new methods called on
  the checkout.