Root cause:
The return type of ::tolower is int. So when we use ::tolower in
std::transform(), it will generate this warning. If user turns on "treat
warning as error", Catch build will fail due to this warning.
- moved as much logic out of the macros as possible
- moved most logic into new ResultBuilder class, which wraps ExpressionResultBuilder (may take it over next), subsumes ResultAction and also takes place of ExpressionDecomposer.
This introduces many SRP violations - but all in the name of minimising macro logic!