Introduce soft failures.

The intention is to have a kind of fail state that is appropriate for
using in test cases that document bugs. There is a subtle, yet
important different between a suppressed and a soft failure. A
suppressed failure counts as a real failure in the XML output, and
will be reported as a failure in graphs. Soft failures OTOH, will be
reported as skipped in the XML output, but will still run and will
block the build if they pass unexpectedly.
``grep -q`` is not portable.