Move the rest of associated type inference into the new source file, and split RequirementEnvironment into its own AST-level header, because it can be re-used and has no ties to the type checker.