Merge pull request #219 from pbrunet/fix_omp

Fix omp parsing that may lead to bad performance
Fix name context in genexp optimisation
Add ForwardSubstitution 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
Apply ForwardSubstitution 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
Merge pull request #208 from pbrunet/perf

Perf
Enable ForwardSubstitution for Literals
Add missing keyword in omp statement