THRIFT-4653: ES6 classes support (#1615)

* ES6 classes support
* Lint generated code
* ES6 Tests for NodeJS
* Add eslint rules for nodejs
* Run prettier/eslint on nodejs test code
diff --git a/lib/js/Gruntfile.js b/lib/js/Gruntfile.js
index fd290d2..bb7691a 100644
--- a/lib/js/Gruntfile.js
+++ b/lib/js/Gruntfile.js
@@ -221,31 +221,37 @@
       // The main thrift library file. not es6 yet :(
       lib: {
         src: ['src/**/*.js'],
-        options: {
-          // options here to override JSHint defaults
-          globals: {
-            jQuery: true,
-            console: true,
-            module: true,
-            document: true,
-          },
-        }
       },
       // The test files use es6
       test: {
         src: ['Gruntfile.js', 'test/*.js'],
         options: {
-          // options here to override JSHint defaults
-          globals: {
-            jQuery: true,
-            console: true,
-            module: true,
-            document: true,
-          },
           esversion: 6,
         }
       },
-    }
+      gen_js_code: {
+        src: ['test/gen-js/*.js', 'test/gen-js-jquery/*.js'],
+      },
+      gen_es6_code: {
+        src: ['test/gen-js-es6/*.js'],
+        options: {
+          esversion: 6,
+        }
+      },
+      gen_node_code: {
+        src: ['test/gen-nodejs/*.js'],
+        options: {
+          node: true,
+        }
+      },
+      gen_node_es6_code: {
+        src: ['test/gen-nodejs-es6/*.js'],
+        options: {
+          node: true,
+          esversion: 6,
+        }
+      }
+    },
   });
 
   grunt.loadNpmTasks('grunt-contrib-uglify');
@@ -269,8 +275,8 @@
   ]);
 
   grunt.registerTask('test', [
-    'jshint',
     'installAndGenerate',
+    'jshint',
     'shell:ThriftTestServer', 'shell:ThriftTestServer_TLS',
     'shell:ThriftTestServerES6', 'shell:ThriftTestServerES6_TLS',
     'wait',