[stream] More fixups

Towards an abstract file descriptor.
[stream] Add a stdio-based buffered implementation

Should be fairly solid, though more testing will help.
The buffering in stdio makes most of the syscalls go away.
Most remaining are the lseek() syscalls caused by fseek()
calls for when moving backward in the buffer.  I think
it's a bug in stdio to make those syscalls when the result
is cached anyway.  Anyway, this is a huge improvement
already, specially when reading the buffer forward.