Overhaul AST for types

This brings the AST for types and type related things in line with the Flow parser. The current way this esprima fork represent types in the AST was just intended to be a placeholder until proper support could go in. This is that proper support. 

Yes, this is a huge pull request, but I don't really see a better way to do stacked pull requests. I did break it down into 11 different commits, so it might be easier to read commit-by-commit.

By design, these changes only affect features that are tested by fbtest.js.

I tested these changes in 3 primary ways:
1) npm test
2) The Flow parser has a test suite that compares it's AST output with esprima's. I added about [80 tests](https://gist.github.com/gabelevi/f8a860cb70600b855e73) to check the consistency between the two parsers, in addition to the ~800 tests already running
3) I fixed the FB transforms to work with the AST changes and made sure FB's codebase still transforms cleanly. I compared the transform outputs from before and after to make sure it was outputting the same thing (modulo some transform fixes)
```
} else {
  expect('}');
}
```