This change is very mechanical. All it does is change the signature of Options::GetDefinitions() and OptionGroup::GetDefinitions() to return an llvm::ArrayRef<OptionDefinition> instead of a const OptionDefinition*. In the case of the former, it deletes the sentinel entry from every table, and in the case of the latter, it deletes the GetNumDefinitions() method from the interface. These are no longer necessary as ArrayRef carries its own length.
The bulk of this CL is relocating the options table from one point in the file to another. This is because I removed the static OptionDefinition g_option_table from each of the classes. By raising them to the file statics instead of class statics, it should give them internal linkage, speeding up link times and possibly having positive effect on binary size. But it also means they have to appear above the option definition class instead of below, since there is no declaration.