Bivalent streams improvements
This pull request is based on refactor-streams and introduces:
- ext:unread-byte, ext:peek-byte
- gray:stream-unread-byte, ext:stream-peek-byte
Moreover it increases the number of vector element type vs external format combinations. When the external format is default, then we can use any vector with upgraded element type being an integer, and then characters are produced with code-char. Moreover it is now possible to supply a character vector, and the stream will be bivalent with bytes being char-code.
Another non-trivial change to internals is that I've made binary streams to use encoders and decoders like we already had with eformat readers and writers. That allows us to have bivalent streams that respect intervening unread-byte read-char unread-char read-byte. Technically we could incorporate custom binary formats for quick parsing objects in the future.
byte-stack was only used for os streams, so I've moved all functionality related to it there, so that sequence streams do not suffer the penalty for consing a list of bytes to never be consumed.
That is accompanied with necessary manual changes and a new test suite dedicated for streams (besides eformat test suite).