DO NOT MERGE: Code review for code generation

Tests and documentation are still in progress. :construction:

Added `/apis/drive/v2.js` and `/apis/urlshortener/v1.js` in this PR as examples of generated code.

Example of using this new library:
``` js
var google = require('googleapis');
var shortener = google.urlshortener('v1'); // unauthenticated shortener object
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2( /* ... */ );

/* Auth is same as current implementation */

oauth2Client.setCredentials({
  access_token: ACCESS_TOKEN
});

// immediately authenticated drive object
var drive = google.drive({ version: 'v2', auth: oauth2Client });

/** SIMPLE RESOURCE REQUEST **/

myShortener.url.insert({
  resource: {
    longUrl: 'https://google.com'
  }
}, function(err, body) {
  console.log(body);
});


/** REQUEST WITHOUT PARAMS 

NOTE: the params can be optional. will detect based on type.
**/

drive.files.list(function(err, body) {
  console.log(err, body.items.length);
});


/** MEDIA UPLOAD REQUEST **/

drive.files.insert({
  resource: {
    mimeType: 'text/plain',
    title: 'test file'
  },
  media: 'this is a test'
}, function(err, body) {
  console.log(err, body.title); //  'test file'
});
I think we exist with some error code if one of the tasks fail. Why not passing a callback? And throw an error if one of the tasks fail. You can use `async.parallel` for flow control.