spindle: fix skipped tests not actually being skipped
`if` effectively neuters `set -e`:
```
$ bash -c 'set -ex; f() { false; echo 123; }; if f; then echo 456; fi'
+ f
+ false
+ echo 123
123
+ echo 456
456
```
so the test keeps on running. Instead, we can rely on `exit` (which is
not going to break as easily) + a subshell to make sure we actually
catch error codes. (This might also cause other forms of test "failure"
to not get detected, as well.)