fu::run() returns an exit code. 0=all pass, 1=one or more failures

as each test runs, if any one of them is marked failed, fu::$exit_code
is changed to 1. fu::run() returns an exit code that can be used or
ignored. this aids in automation as other scripts can watch for non-zero
exit codes.