DO NOT MERGE: Code review for code generation

THIS DOES NOT HAVE TESTS YET. :frowning: THEY ARE 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:
```javascript
var google = require('googleapis');
var shortener = google.urlshortener('v1'); // unauthenticated shortener object
var OAuth2 = g.auth.OAuth2;
var oauth2Client = new OAuth2( /* ... */ );

/* Auth is same as current impl. */

oauth2Client.setCredentials({
  access_token: ACCESS_TOKEN
});

var myShortener = shortener.auth({  // here we authenticate the shortener object
  apiKey: API_KEY
  /*, authClient: oauth2Client */ 
});

// immediately authenticated drive object
var drive = google.drive('v2').auth({ authClient: oauth2Client }); 

/** SIMPLE QUERY / BODY REQUEST **/

myShortener.url.insert({
  body: {
    longUrl: 'https://google.com'
  },
  query: {} // query unused here so this could be omitted
}, function(err, body) {
  console.log(body);
});


/** REQUEST WITHOUT PARAMS **/

drive.files.list({}, function(err, body) {
  console.log(err, body.items.length);
});


/** MEDIA UPLOAD REQUEST **/

drive.files.insert({
  media: {
    metadata: {
      title: 'test file'
    },
    mimeType: 'text/plain',
    data: 'this is a test'
  }
}, function(err, body) {
  console.log(err, body.title); //  'test file'
});
Just to document more internal discussions here: We would like to flatten the structure of the parameters to reduce friction with protocol changes in the future. By flattening the structure we can more closely mimic other API client libraries. Our parameters will all live in the top level of the parameters object. I will be scoping out more of this in the coming weeks as time permits.