refactor inference.jl into multiple files for readability/maintainability (#25517)
- the contents of `coreimg.jl`, `inference.jl` and `codevalidation.jl` now live in `base/compiler/`
- `Core.Inference` --> `Core.Compiler`, and `Core.InferenceParams` --> `Core.Compiler.Params`, since these refer to more than just type inference at this point
- Constants/structs now mostly appear in the file in which they are first used. Non-business logic methods acting on freshly-defined structs are now defined alongside the structs themselves. Non-business logic methods which don't depend on new structs are now in `utilities.jl`.
- All non-alias `const` names are now all-caps. Type alias `const`s are camelcase, and function alias `const`s are lowercase.
- Inference logic is split into several files (`abstractinterpretation.jl`, `typelattice.jl`, `typeinf.jl`, etc.)
- All the tfunc definitions now reside in their own file.
- Optimization logic (inlining, DCE, etc.) hasn't been broken up at all yet; it is now in `optimize.jl`. A future PR will be required to break it up.
- No semantic changes, at least not on purpose.