This commit builds on the support from #8448 to remove all blanket impls
from the WASI crates and instead replace them with concrete impls. This
is slightly functionally different from before where impls are now on
trait objects meaning dynamic dispatch is involved where previously
dynamic dispatch was used. That being said the perf hit here is expected
to be negligible-to-nonexistent since the implementations are large
enough that the dynamic dispatch won't be the hot path.
The motivations for this commit are:
* Removes the need for an odd `skip_mut_forwarding_impls` option - but
this'll be left for a bit in case others need it.
* Improves incremental compile time of these crates where the crates
themselves now contain all object code for all of WASI instead of
forcing the final consume to codegen everything (although there's
still a significant amount monomorphized).
* Improves future compatibility with refactorings of
bindgen-generated-traits and such because blanket impls are pretty
hard to work around where concrete impls are easier to reason about
(and document).