[BUG #6169] no more need for an explicit exclude of qx.event.GlobalError
[BUG #6169] remove unnecessary @ignore of qx.event.GlobalError
[BUG #6169] re-wrote treeutil.inlineIfStatement

- to optionally be used without side-effect (changing the parent tree)
- and attach rescued var decls to the returned replacement (again, not side-effect-fully
  to some parent node)
[BUG #6169] better null replacement with empty else
[BUG #6169] fixing HOOK variant optimization by introducing a new Reducer

- adding a new reducer to reducer.py, ASTReducer
- incorporates ideas and code from the older ConditionReducer and evaluate.py
  module (duplicating some code!)
- the idea is to have a reducer that constructs a new, potentially reduced, tree
  from an AST tree, by exploiting existing constants in operations
- replaces such operations by their result ('constant') node
- or, in case of control structures, by the resulting branch node

- this is now used in variantoptimzier.py, after the qx.core.Environment
  calls have been replaced
- and replaces the old attempt to "optimize upwards" from the former Environment
  call
- instead, the entire AST is reduced top-down after Environment reduction
[BUG #6169] add environment json:true, as discussed in bug

- enabled 'statics' optimization
- also re-wrote build jobs, so all do statics optimization
[BUG #6169] add cache settings to verify-* jobs