generate plan and result events

ignore comments and subtests completely for now
also generate start and end events
use iterators instead of streams

streams buffer the next character (to support Stream.Empty), which means
that if there is exactly one line available, it will read that line and
then block waiting for the next character before the result stream can
be returned. this means that we don't get results from the current line
until the next line is ready. iterators don't have that problem, since
they don't have a separate Empty type, they just have a hasNext method.