Moved the main `impl` for FnCtxt to its own file. Resolves #77085 without breaking the API of the `FnCtxt` struct. This is a solution to the file length being over 3000 (see issue #60302). The other solution to the file length is 1. to change the API of this struct by 2. encapulating certain fields of the struct into other structs.
For high-level intro to how type checking works in rustc, see the type checking chapter of the rustc dev guide.