std: add type-erased reader; base GenericReader on it

The idea here is to avoid code bloat by having only one actual io.Reader
implementation, which is type erased, and then implement a GenericReader
that preserves type information on top of that as thin glue code.

The strategy here is for that glue code to `@errSetCast` the result of
the type-erased reader functions, however, while trying to do that I
ran into #17343.
d8540dd708Andrew Kelley committed on 10/3/2023, 9:55:17 PMparent4df7f7c
5 files changedLine totals unavailable