use boost::exception in error classes, error_chain class, error test