Define all constants while lexing and parsing
The mechanism now works with nested compiler directives
Break on expressions after #if directives

The purpose of this mechanism is to insert an EOL so that expressions
right after #if directives can be indented properly.

This is implemented by collect all positions which have #if directives
right before.
Break on expressions after comments

This is intended to insert EOL and spaces for injecting comments.

To be able to do so, we annotate all positions right after comments.

autoBreakNln is changed to preserveBreakNln to make use of information
regarding comments and directives.

There are a few exceptions which should be handled in the future.
Hide implementation details of FormatConfig module
Widen the criteria for two identifiers to match
Merge branch 'experimental'
Insert EOL if an expression is multiline inside a tuple

We might need to do the same for records and lists.

The mechanism should be extended to deal with interleaves of one-liner
and multiline expressions. However, this scenario is quite rare.