Split arguments of writeToken

While thinking about the documentation for FormattingWriter, I realized
that it performs three tasks: indentation, line breaking, spaces between
tokens (well, and comments). However, two of these functions were lumped
together in the arguments of writeToken. This was purely for historical
reasons (the line break mechanism was very crude until very recently,
see 0d8e82e). This commit therefore splits up beforeToken and afterToken
into linebreaksBefore, indentBefore and linebreaksAfter, indentAfter
respectively.

I hope that this makes the code more readable, and I _really_ hope that
this is the last time I have to make breaking changes to writeToken’s
interface...
Add loads of documentation to FormattingWriter

The existing documentation was in part horribly outdated, and in part
simply missing.