[ES6] Wrap Arrow Functions into a grouping operator

In case if an Arrow Function is not in the expression position, we should turned it into a function expression.

  (x) => x;

should compile to:

  (function(x) { return x; });

previously it's compiled to:

  function(x) { return x; };

that is a syntax error: "Function Declaration w/o a name"

In case when the arrow is already in the expression position, grouping is not needed.
[jstransform] Object Spread Properties

Adds support for spread operator in object literals.

There is a special case for accessors which needs to use defineProperties
as the shim. This initial transform doesn't support it but can be chained
with one that does.

Depends on https://github.com/facebook/esprima/pull/22
Update to latest esprima

This is actually required for the previous commits.