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 should generate this file as well while we have a list of all APIs. fs.statting to retrieve that list again is cart before the horse.

~~~ js
APIs.drive = function() {
  var type = typeof options;
  var version;
  if (type === 'string') {
   version = options;
   options = {};
  } else if (type === 'object') {
   version = options.version;
   delete options.version;
  } else {
   throw new Error('Argument error: Accepts only string or object');
  }

  return require('./' + filename + '/' + path.basename(version));
}
~~~