Various improvements to CheriBSD's /bin/cheritest:

Move 'struct cheri_test' from cheritest.c to cheritest.h, and pass test
intances to test functions so that they have access to the test
description (e.g., I/O expectations).

Add a new CT_FLAG_STDIN_STRING and corresponding .ct_stdin_string that
define a string to pass to a test's standard input.

Create new stdin_fd_object and stdout_fd_object cheri_fd instances to
pass to file-descriptor-related tests, which wrap up (respectively)
stdin and stdout.

Reimplement tests to read() and write() file descriptors using cheri_fd
so that they test the data read and written over stdio rather than just
test for a non-crashing result.  Also reimplement the test for revoke()
to confirm that writes do not succeed after a cheri_fd object has been
revoked.
Don't printf() as much in cheritest-helper: its output now goes into a pipe
that may or may not have room, which could deadlock the test (until it is
timed out, of course), causing the test to fail.
Break out the fd_revoke test case into two: one for revoke() before read(),
and the second for revoke() before write().