Allow comments directly after statements

    print("Like this"); // this comment stays on the same line

That sounds trivial, but actually required major-ish changes to the
architecture. FormattingWriter.intersectAllowedLineBreaks now takes an
optional parameter to determine if comments should be fast-forwarded
before intersecting (for example, you want to enforce a line break after
a statement, but allow a comment on the same line). To allow this,
fastForwardComment was refactored out of writeToken again (it had been
inlined for a while), and givenLineBreaks was moved from a writeToken
variable to a FormattingWriter variable, since writeToken and
intersectLineBreaks both have to set it (intersectLineBreaks, while
searching for comments, already consumes some whitespace that has to be
recorded in that variable).

The simpleClass test had to be modified because `implements Thingy` can
now be on its own line (previously, an invocation expression allowed no
line breaks after its closing parenthesis, which in turn caused an
AssertionException when intersecting this with the required line breaks
of an annotation like `by ("Someone")`; this bug was “dormant” before
because requireAtLeastLineBreaks, in contrast to intersectAllowedLineBreaks,
didn’t check the intersection for emptiness properly).