Fix name context in genexp optimisation
Add LazyExpressionPropagation optimisation.

* It forwards in the code lazy variables used only once.
  def foo(): a = 2; print a
  become
  def foo(): print 2

* It will give more work to constant folding
* Should be good for scientists as they use a lot of variable as constant parameter (eg. R = rayon_of_earth, G = gravity, ....)
Fix set operator for empty set or not enough arguments
Change PureFunctions analysis to PureExpressions analysis
Fix pythonic for list
Fix lazyAnalysis for omp clause
Fix backend for omp clause using scope analysis instead of metadata
Fix lazyness analysis for subscripted variables

* Partialy modified variables means variables using it are deads
Scope analysis is more powerful for declaration than metadata
Fix unparse for empty set
Apply lazyExpressionPropagation earlier to fed constant folding
Fix function expand when module is not imported
Add missing combiners
Fix LazyAnalysis as Exception can't be lazy
Fix LazyAnalysis : iterate variable can't be lazy
Fix test to avoid constant folding
Formatting: remove whitespaces in tests