It is unclear to me that the way method call privacy checking is done makes any sense, though. It is only performed if the type is a struct...
This fixes the large number of problems that prevented cross crate methods from ever working. It also fixes a couple lingering bugs with polymorphic default methods and cleans up some of the code paths. Closes #4102. Closes #4103.