Merged PR for issue #883 : adding ES6 features

Here is the feature list, and matching pull requests:

* added support of multiple catch blocks, PR #921 : `try { … } catch (e) { … } catch (e) { … } finally { … }`
* added support of for/of loops, PR #920 : `for ( … of … ) …;`
* added function expression closure support, PR #918 : `let add = function(x, y) x + y;`
* added destructuring assignment support #883, and PR #884
  * added encapsulated DA support : `var [ a, b, [c, d]] = [1, 2, [3, 4]];`
  * added function call support : `function foo([a,b,c])`
* added support of let statements (#993, #679, #419, #73) and PR #892
  * added block scope support, and global blockscope
  * added support for block statements `{ foo(); bar(); }`
  * added support for let block statements `let (x = 1, y = 2) { print(x, y); } `
  * added support for let expressions `let(x=1) print(x);` or `print(let(x=1) x);`
  * added error on double let definition `let x=1; let x=2;`
  * added support in for loops `for(let … in …)` and `for(let …; … ; …)`
* fixed error #895 from PR #894
* added generator functions support (#898)
* added for each statement support (#899)
* added list comprehension support (#907):
  * `var x = [i*i for each (i in myarray)]`
  * with filters: `var y = [i for each (i in myarray) if (i % 2 == 0)]`
  * return subarrays: `var z = [ [i, j] for [i, j] in [[0,0], [1,1], [2,2] ]`
  * imbrication: `var t = [ i for i in [ j for j in myarray ] ]`
* added trycatch filter support (#913): `try { … } catch { e if e.name === "foo" }`

I used some examples from [MDN's page about JS1.7](Example from https://developer.mozilla.org/en-US/docs/JavaScript/New_in_JavaScript/1.7) as validation tests implementation.