[WIP] Descriptor refactor.

This PR is working on completely decoupling the meta data required to generate the source binding from the JSON published by the libgit2 project.  Once this is completed, we should be able to trivially add and remove new methods and classes as they change by simply updating the descriptor file.

So far it's going better than expected, libgit2 is so strict with the conventions that I can infer most manually added properties.  This is a very important PR so time will be taken and it will not be rushed.

My goal is to improve the templates in a separate PR.
It's not needed, but I prefer to opt into strict parsing as it's not enabled by default:

``` javascript
> (function() { const a = 1; a = 5; })();
undefined
> (function() { "use strict"; const a = 1; a = 5; })();
SyntaxError: Use of const in strict mode.
    at REPLServer.self.eval (repl.js:110:21)
    at Interface.<anonymous> (repl.js:239:12)
    at Interface.emit (events.js:95:17)
    at Interface._onLine (readline.js:202:10)
    at Interface._line (readline.js:531:8)
    at Interface._ttyWrite (readline.js:760:14)
    at ReadStream.onkeypress (readline.js:99:10)
    at ReadStream.emit (events.js:98:17)
    at emitKey (readline.js:1095:12)
    at ReadStream.onData (readline.js:840:14)
```