[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.
How about decorate all backwards compatibility same way:
Object.defineProperty(TreeEntry.prototype, "name", {
  get: function() {
    console.error("You are use deprecated API. Use 'filename' instead.");
    return TreeEntry.prototype.filename
  }
});