Lazily create builtin bindings (#26510)
## Summary
The linter previously inserted every version-specific builtin, magic
global, notebook builtin, and configured custom builtin into the module
scope before walking the AST, even when a file never referenced most of
those names.
This moves builtin identification into `SemanticModel` and creates
concrete builtin bindings only when a load or binding operation needs
them.
---------
Co-authored-by: Charlie Marsh <charliemarsh@openai.com>