[WIP] Pretty Printer

The only known issue (apart from the slight ugliness of the code due to the nontrivial rules for pretty whitespace) is that the main method is pretty printed as `public void main(String[] args) {...` (dropping the `static`).
You might want to pass all Boolean parameters as named parameters to make the code clearer. You do that in a few places already.