transformVariableDeclarationList(tree) {
    if (!hasDestructuring(tree)) {
      // No lvalues to desugar.
      return super.transformVariableDeclarationList(tree);
    }

    // Desugar one level of patterns.
    let desugaredDeclarations = [];
    tree.declarations.forEach((declaration) => {
      if (declaration.lvalue.isPattern()) {
        desugaredDeclarations.push(
            ...this.desugarVariableDeclaration_(declaration));
      } else {
        desugaredDeclarations.push(declaration);
      }
    });

    // Desugar more.
    let transformedTree = this.transformVariableDeclarationList(
        createVariableDeclarationList(
            tree.declarationType,
            desugaredDeclarations));

    return transformedTree;
  }
Transforms:
  [a, [b, c]] = x
From a variable declaration list into:
  tmp = x, a = x[0], [b, c] = x[1]

We do it this way (as opposed to a block with a declaration and
initialization statements) so that we can translate const
declarations, which must be initialised at declaration.

Nested patterns are desugared by recursive calls to transform.

@param {VariableDeclarationList} tree
@return {ParseTree}