Split log level to LOG_LEVEL and LOG_LEVEL_BUILD

Changes are in preparation to make log level runtime configurable.
LOG_LEVEL_BUILD controls which logging severities are activated.
Unless explicitly requested to be omitted, unused logging expressions
now remain in the code and are compiled and usually optimised away.
Back-en macros now use do {} while() technique as in Catch.

Thanks to Phil Nash for code and explanations.