Add syntax for negative implementations of traits

This commit introduces the syntax for negative implmenetations of traits
as shown below:

`impl !Trait for Type {}`

cc #13231
Part of RFC #3
Put negative trait implemtations behind a feature gate
Rename opt_out_copy into optin_builtin_traits

This change was introduced as part of the OIBIT work and a feature was
added to allow for opting out from `Copy`. Since a broader feature gate,
specific to this RFC, is being added, the old `opt_out_copy` feature has
been pulled into the broader one.

[breaking-change]
This change breaks code depending on this feature