+ array comprehensions support

ESPRIMA:
* reinterpretAsAssignmentBindingPattern left part of for-of expression
inside array comprehension

core.js:
+ markThisUsing for any hoist scope
+ ComprehensionExpression create a hoist (!!!) scope and adding
variables from ComprehensionBlock's to this hoist scope
* update __getNodeBegin method for working with ComprehensionExpression

forOf:
* refactoring to allow using for-of transpiler logic from another
transpiler

TESTS:
+ for-of with destructuring
+ arrayComprehension test