Gather module items after lowering. This avoids having a non-local analysis inside lowering. By implementing `hir_module_items` using a visitor, we make sure that iterations and visitors are consistent.
For high-level intro to how type checking works in rustc, see the type checking chapter of the rustc dev guide.