Add more documentation and structure to extension types, only run type inference once on extension methods