stbt batch report: HTML-escape failure reason

The exception message could contain "<", or if using pytest as the test
runner you get output like this:

    AssertionError: assert MatchResult(timestamp=267831006, match=...)
     +  where MatchResult(...) = <function match at 0x7fdc97828578>(...)
     +    where <function match at 0x7fdc97828578> = stbt.match
stbt batch report: Don't silently skip some invalid directories

We fail loudly for non-directory non-"index.html" arguments, so why not
also fail on directories that aren't produced by "stbt batch run".

This helped me to debug an issue when I was developing a pytest-based
test runner (a compatible replacement for "stbt batch run").