macros provided by the configuration should be not overridable by ordinary defines in source code
rework the preprocessor such as the 'kind' of preprocessor lines is
determined by parsing. This seems to be a more scalable and cleaner way.
add handing of elif lines, which is different from handling of if lines, after all