This works for all protocols except for Decodable on non-final classes, because the init requirement has to be 'required' and thus in the type's declaration. Fixes most of https://bugs.swift.org/browse/SR-6803.