impl trait for trait

Code that ensures that every trait object `Foo` implements the trait `Foo`.

This requires patching up some object safety concerns. Also more-or-less requires removing the default `Sized` bound for `Self`. Don't merge yet until we we reach final decision on these language changes. 


This comment is for `type_moves_by_default_cache`, not `object_safety_cache`.