Merged PR for issue #883 : adding ES6 features

Here is the feature list, and matching pull requests:

* 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.