rustc: do not inherit #[stable]

This patch tweaks the stability inheritance infrastructure so that
`#{stable]` attributes are not inherited. Doing so solves two problems:

1. It allows us to mark module *names* as stable without accidentally
marking the items they contain as stable.

2. It means that a `#[stable]` attribution must always appear directly
on the item it applies to, which makes it easier for reviewers to catch
changes to stable APIs.

Fixes #17484
Update tests for new stability inheritance rules
std: Rename AsRef{Reader,Writer} to ByRef{Reader,Writer}
Fix inconsistent use of substs in trans_unboxing_shim

Substs were not applied when calling `untuple_arguments_if_necessary`.
Just apply them once at the start of the function, rebinding `fty`.
Also change the function to take them by reference since we don't
need to consume them at all.  Closes #18883
Add regression test for #18883
Take parameters by-value in Signed trait
Deprecate Signed method wrappers
Move abs_sub to FloatMath

This removes the need for libcore to depend on libm. `abs_sub` is not as useful for integers.
Create UnsignedInt trait and deprecate free functions
Move saturating operator methods into Int
Rejig Int impl macros

This should make implementing the checked operator methods easier
Move checked arithmetic operators into Int trait
Deprecate Bounded trait
Deprecate Zero and One traits
Deprecate Num, Unsigned and Primitive
Deprecate signum wrapper and clean up signed impls
Clean up core::num doc comments
Remove lots of numeric traits from the preludes

Num, NumCast, Unsigned, Float, Primitive and Int have been removed.
Remove Signed trait and add SignedInt trait

The methods have been moved into Float and SignedInt
Fix stability_summary fallout